Можем ли мы реализовать функции multimap_intersection или multimap_difference, как мы это делаем для set_intersection и set_difference в STL?
1 ответ
Вопрос довольно расплывчатый, и комментарии проясняют некоторые, но не все проблемы. Самый упрощенный ответ заключается в том, что вы можете реализовать (при правильном определении) почти все, и поэтому вы можете реализовать свою версию разности или пересечения для мультикарт. Если вопрос заключается в том, можно ли использовать set_difference
непосредственно для ваших целей, ответ будет отрицательным.
Проблема в том, что set_intersection
и set_difference
реализованы на основе предположения, что диапазоны итераторов отсортированы, что верно для ключей в упорядоченный ассоциативный контейнер (set
, map
, multiset
, multimap
), но не для комбинации (ключ, значение), которая, кажется, является тем, что вы хотите получить разницу из.
В качестве обходного пути можно было бы создать функтор, сравнивающий пары типов ключ-значение, и использовать его в качестве порядка для set
(не multiset
). Затем вы можете вставлять значения в свои мультикарты в наборы и работать с ними. Наконец, выполните операцию в обратном порядке, создав новые мультикарты из набора пересечений/разностей.
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
set
какmultiset
. Мультинаборы позволяют использовать несколько экземпляров ключа так же, как мультимап, и вопрос все тот же: каков будет ожидаемый результат для операций с двумя мультинаборами, как указано выше?