Недавно я обнаружил, что реализация хэш-карты в С++ будет называться unordered_map. Когда я посмотрел, почему они не просто используют hash_map, я обнаружил, что, по-видимому, существуют проблемы совместимости с реализацией hash_map, что unordered_map разрешает (http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29). Страница wiki не дает гораздо больше информации, поэтому я задаюсь вопросом, знает ли кто-нибудь из проблем с hash_map, что unordered_map разрешает
Разница между hash_map и unordered_map?
Ответ 1
Поскольку в стандартной библиотеке С++ не было хеш-таблицы, различные разработчики стандартных библиотек предоставили бы нестандартную хеш-таблицу, часто называемую hash_map
. Поскольку эти реализации не были написаны в соответствии со стандартом, все они имели тонкие различия в функциональности и гарантиях производительности.
Начиная с С++ 11 в стандартную библиотеку С++ добавлена реализация хэш-таблицы. Было решено использовать альтернативное имя для класса, чтобы предотвратить конфликты с этими нестандартными реализациями и предотвратить непреднамеренное использование нового класса разработчиками, у которых hash_table
в их коде.
Выбранное альтернативное имя unordered_map
, которое действительно более наглядное, поскольку оно намекает на интерфейс карты классов и неупорядоченный характер его элементов.