2011-12-31 2 views
0

Можем ли мы реализовать функцию multimap_intersection или multimap_difference, как и для set_intersection и set_difference в STL?Можно ли реализовать multimap_intersection и multimap_difference аналогично set_intersection и set_difference,?

+1

Это теоретический вопрос или вы на самом деле пытаетесь реализовать что-то подобное? Или вы ищете существующую реализацию? – Mat

+0

@Mat я видел реализацию в комплекте и реализовал ее, но я видел, что для набора были встроенные функции, но не в случае мультимапа. Нужно ли нам писать с нашей собственной логикой или есть что-то существующее такого рода? – Invictus

+0

Это зависит от семантики, которую вы хотите предоставить. Для заданных множеств {A, A, A, B, C, D} и {A, A, B, B, C, E}, каков будет результат ваших операций? –

ответ

1

Вопрос довольно расплывчатый, и комментарии разъясняют некоторые, но не все проблемы. Самый простой ответ заключается в том, что вы можете реализовать (с учетом правильного определения) почти все, и как таковое вы можете реализовать свою версию разности или пересечения для мультикадров. Если вопрос заключается в том, можно ли использовать set_difference непосредственно для вашей цели, ответ отрицательный.

Проблема заключается в том, что set_intersection и set_difference реализуются на основе предположения, что диапазоны итератора являются отсортированы, что верно для ключей в упорядоченном ассоциативном контейнере (set, map, multiset, multimap), но не для комбинации (ключ, значение), который, кажется, является тем, что вы хотите получить.

Обходной путь будет создавать функтор, который сравнивает пары типов значений ключа и использует их как порядок для set (не multiset). Затем вы можете вставлять значения в свои мультимаксы в наборы и работать с ними. Наконец, измените операцию, создав новые мультиплексы из набора пересечений/различий.

+0

Я предполагаю, что предложение о его внедрении сначала в set и mltimap будет работать .. но это может привести к ненужному увеличению моего LOC, а также мне нужно будет создать первый набор заполнений с моими значениями, а затем мультимап, а это может увеличить время сложность ... Newaz еще раз спасибо за ваш быстрый ответ – Invictus

Смежные вопросы