Разница между hash_map и unordered_map? - PullRequest
44 голосов
/ 29 октября 2009

Я недавно обнаружил, что реализация хэш-карты в C ++ будет называться unordered_map.

Когда я посмотрел, почему они не просто использовали hash_map, я обнаружил, что, очевидно, существуют проблемы совместимости с реализацией hash_map, которые unordered_map решает (подробнее об этом здесь ) .

Эта вики-страница не дает намного больше информации, поэтому мне интересно, знал ли кто-нибудь о некоторых проблемах с hash_map, которые unordered_map решает.

1 Ответ

68 голосов
/ 29 октября 2009

Поскольку в стандартной библиотеке C ++ не было определено хеш-таблицы, различные разработчики стандартных библиотек предоставили бы нестандартную хеш-таблицу, часто называемую hash_map. Поскольку эти реализации не были написаны в соответствии со стандартом, все они имели тонкие различия в функциональности и гарантиях производительности.

Начиная с C ++ 11 в стандартную библиотеку C ++ добавлена ​​реализация хеш-таблицы. Было решено использовать альтернативное имя для класса, чтобы предотвратить столкновения с этими нестандартными реализациями и предотвратить непреднамеренное использование нового класса разработчиками, у которых в коде было hash_table.

Выбранное альтернативное имя unordered_map, которое на самом деле более наглядно, поскольку оно намекает на интерфейс карты класса и неупорядоченную природу его элементов.

...