Я проголосовал за unordered_map
, но я также хотел высказать еще одно замечание.
Одной из причин ухудшения производительности на современных машинах является плохое использование кэша. Карта будет иметь узлы, расположенные повсеместно, и там не будет много мест ссылки. Кроме того, поскольку он должен хранить кучу указателей между узлами, он будет использовать больше памяти.
На недавней конференции Going Native 2012 Бьярн Страуструп выступил с интересным докладом , который затрагивал эту тему. Он сравнил производительность vector
и list
в задаче, включающей много случайных вставок и удалений, где могло бы показаться, что list
должен был доминировать, но из-за проблемы с размером и размещением памяти vector
был на самом деле самый быстрый на сегодняшний день. Взгляните на его слайды , начиная с слайда 43.
unordered_map
дает вам прямой доступ к элементу, и, вероятно, это означает, что в памяти даже меньше, чем попытка вставить ваши данные в vector
(и, следовательно, лучшую производительность, чем vector
), поэтому мой комментарий просто предостережение, чтобы всегда помнить ваш образец доступа к памяти для производительности