Это на самом деле зависит от типов целых чисел, которые вы будете использовать.
Если в качестве ключа у вас может быть отрицательное целое число, то map
- это путь, так как vector
не делаетНе поддерживаю отрицательные показатели.На заметку о том, что если у вас никогда не будет отрицательных ключей, рассмотрите возможность ввода элементов с использованием unsigned int
вместо int
, чтобы было яснее, что ключи могут быть отрицательными.
Если вы будетеиметь большое количество маленьких целых чисел в качестве ключей, vector
может быть хорошим вариантом.Использование памяти для вашего подхода на основе vector
будет иметь использование памяти O (U + n), где U - самый большой ключ, так как vector
должен иметь непрерывное хранилище.Если U
мало, то подход на основе vector
может быть лучше.Если U
огромен, используйте map
.
Но я думаю, что лучшим решением было бы использование нового C ++ 0x unordered_map
, который дает гарантии сложности, близкие к таковым для vector
(поиск каждого элемента в постоянном времени) с гарантией памяти, близкой к памяти map
(вы платите только за элементы, которые используете).Это можно сделать с помощью реализации контейнеров в Boost или с помощью реализации TR1, или (если у вас есть компилятор C ++ 0x) с использованием новых стандартных библиотек.