A vector
дает произвольный доступ в постоянном времени, "id
" может быть просто смещением (индексом) вектора. A deque
похож, но не хранит все элементы подряд.
Любой из этих вариантов будет подходящим, если значения идентификатора могут начинаться с 0 (или известного смещения от 0 и увеличиваться монотонно). Со временем, если имеется большое количество удалений, vector
или deque
могут стать малонаселенными, что может быть вредным.
std::map
не имеет проблемы с малонаселенностью, но поиск перемещается из постоянного времени в логарифмическое, что может повлиять на производительность.
boost::unordered_map
может быть еще лучшим, так как лучший вариант сценария в виде хеш-таблицы, вероятно, будет иметь наилучшие общие характеристики производительности, учитывая вопрос. Тем не менее, использование библиотеки boost может быть необходимым - но в std::tr1
также есть unordered
типы контейнеров, если они доступны в вашей реализации STL.