Разница между hash_map и unordered_map?
-
22-07-2019 - |
Вопрос
Недавно я обнаружил, что реализация хеш-карты на C++ будет называться unordered_map
.
Когда я посмотрел, почему они просто не использовали hash_map
, я обнаружил, что, видимо, есть проблемы совместимости с реализацией hash_map
что unordered_map
решает (подробнее об этом здесь).
Эта вики-страница не дает больше информации, поэтому мне интересно, знал ли кто-нибудь о некоторых проблемах с hash_map
что unordered_map
решает.
Решение
Поскольку в стандартной библиотеке C++ не была определена хеш-таблица, разные разработчики стандартных библиотек предоставляли нестандартную хеш-таблицу, часто называемую hash_map
.Поскольку эти реализации не были написаны в соответствии со стандартами, все они имели небольшие различия в функциональности и гарантиях производительности.
Начиная с С++11 реализация хеш-таблицы была добавлена в стандарт стандартной библиотеки C++.Было решено использовать альтернативное имя для класса, чтобы предотвратить коллизии с этими нестандартными реализациями и предотвратить непреднамеренное использование нового класса разработчиками, которые hash_table
в их коде.
Выбранное альтернативное имя: unordered_map
что на самом деле более наглядно, поскольку намекает на интерфейс карты класса и неупорядоченную природу его элементов.