Мне интересно, в каком случае я должен использовать unordered_map вместо std:: map.
Мне нужно использовать unorderd_map каждый раз, когда я не обращаю внимания на порядок элемента на карте?
Мне интересно, в каком случае я должен использовать unordered_map вместо std:: map.
Мне нужно использовать unorderd_map каждый раз, когда я не обращаю внимания на порядок элемента на карте?
map
unordered_map
Сравните хеш-таблицу (undorded_map
) с бинарным деревом (map
), запомните свои классы CS и соответствующим образом настройте.
Карта хэша обычно имеет O (1) для поиска, карта имеет O (logN). Это может быть реальная разница, если вам нужно много быстрых поисков.
Карта хранит порядок элементов, что также полезно иногда.
map
позволяет перебирать элементы по-упорядоченному, но unordered_map
нет.
Поэтому используйте std::map
, когда вам нужно перебирать элементы на карте в отсортированном порядке.
Причина, по которой вы выбрали одну из них, - это производительность. В противном случае они создали бы только std::map
, так как он делает больше для вас:)
Используйте std::map
, когда вам нужно автоматически сортировать элементы. Используйте std::unordered_map
другие времена.
См. обоснование спецификации SGI STL с точки зрения сложности.
unordered_map
- O (1), но довольно высокие постоянные накладные расходы для поиска, вставки и удаления. map
- O (log (n)), поэтому выбирайте сложность, которая наилучшим образом соответствует вашим потребностям. Кроме того, не все ключи могут быть помещены в оба вида карты.