Полагаю, вы сравниваете map<A, B>
с vector<pair<A, B> >
.
Во-первых, поиск элемента в очень маленьком векторе может быть быстрее, чем то же, что и на карте, потому что вся память в векторе всегда смежна (и поэтому лучше работает с кешами компьютеров и тому подобным), и число сравнений, необходимых для нахождения чего-либо в векторе, может быть примерно таким же, как и для карты. Поиск элемента на карте требует меньше операций в пределе очень больших контейнеров.
Точка, в которой карты становятся быстрее, чем векторы, зависит от реализации, от вашего процессора, от того, какие данные находятся на карте, и от тонких вещей, таких как объем памяти в кеше процессора. Как правило, точка, где карта становится быстрее, будет около 5-30 элементов.
Альтернативой является использование хеш-контейнера. Их часто называют hash_map
или unordered_map
. Классы с именем hash_map
не являются частью официального стандарта (и существует несколько вариантов); std::tr1::unordered_map
есть. Хеш-карта часто быстрее, чем обычная карта для поиска, независимо от того, сколько в ней элементов, но насколько она на самом деле быстрее, зависит от того, что является ключом, как он хэшируется, с какими значениями вам приходится иметь дело, и как ключ сравнивается в std :: map. Он не хранит вещи в определенном порядке, например, std :: map, но вы сказали, что вас это не волнует. Я бы порекомендовал карты хешей, особенно если ключи целые или указатели, потому что они очень быстро.