Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > STL map |
Автор: Бегемот 29.4.2014, 07:21 | ||
Друзья, есть ли более элегантный способ поиска всех одинаковых ключей в двух словарях чем этот?
|
Автор: borisbn 29.4.2014, 09:22 | ||
Бегемот, а чем этот способ не устраивает ? Наверное можно найти какую-нибудь библиотеку (boost, например) в которой будет функция поиска пересечения в множествах, но по сути она будет делать абсолютно то же самое. Если словари не будут изменяться в момент поиска пересечений, то можно чуууууууть-чуть соптимизировать:
но сути это, ессно, не меняет |
Автор: azesmcar 29.4.2014, 09:39 |
Бегемот, http://www.cplusplus.com/reference/algorithm/set_intersection/ с предикатом для сравнения ключей. |
Автор: Бегемот 29.4.2014, 10:37 |
borisbn, azesmcar, спасибо. set_intersection как раз то что и искал. Как считаете работать быстрее будет, чем код выше? |
Автор: azesmcar 29.4.2014, 10:40 |
![]() У него линейная сложность, у твоего алгоритма n*log(n) |
Автор: borisbn 29.4.2014, 10:55 |
За то в set_intersection делается полная копия всех совпадающих элементов, а в "ручном" алгоритме можно делать с элементом всё, что угодно. Конечно можно написать свой OutputIterator и делать в нём всё, что хочешь, но ИМХО это - изврат |
Автор: baldina 29.4.2014, 14:13 |
Бегемот, погляди возможную реализацию http://www.cplusplus.com/reference/algorithm/set_intersection/ т.к. ключи упорядочены, можно сделать за один проход (линейное время). так же, как в сортировке слиянием. |
Автор: Бегемот 29.4.2014, 16:43 |
baldina, ага, спасибо, посмотрел уже. azesmcar, выше туда же ссылку привел. Отличный способ |