2014-01-28 4 views
0

Я ищу для хранения unordered_set как ключ в unordered_map, это хорошая идея, или я должен использовать std :: set для хранения некоторых данных, а затем использовать std :: map для хранения std :: set as key. Что было бы лучше для производительности/поиска?Это хорошая идея хранить unordered_set как ключ в unordered_map

Любые предложения будут способствовать

ответ

0

Как с большим количеством вопросов, связанных с производительностью структур данных, точный ответ будет зависеть от набора данных.
Учитывая, что вас интересует только производительность поиска, небольшие наборы данных, как правило, предпочитают использование упорядоченных версий контейнеров, где «набор данных» означает среднее количество элементов в ваших ключах для типа ключа (установленного или неупорядоченного) , а также количество элементов (set, value_type) для внешнего типа карты (map vs. unordered_map). Кстати, ничто не мешает вам смешивать упорядоченные и неупорядоченные контейнеры, такие как unordered_map, value_type>
Тем не менее, единственный способ быть на 100% уверенным, какой контейнер лучше, - это профиль этого с вашими фактическими данными.

Имея это в виду, вот еще некоторые детали:

  • Для внешнего контейнера, есть хороший шанс, что использование unordered_map будет поставлять более высокую производительность поиска, на основе обычных характеристик хэш-контейнеров. Тем не менее, существует более тонкое воздействие, которое зависит от сравнительной производительности хеша ключевого контейнера, меньшего, чем оператор и функция.
  • Для ключевого контейнера на производительность поиска влияет относительная производительность меньше чем у оператора контейнера (если ваш внешний контейнер является картой) или его хэш-функция (если ваш внешний контейнер является неупорядоченным_мапом).

Я попытаюсь опубликовать некоторые фактические тесты для измерения этого позже.