Может ли кто-нибудь рекомендовать контейнер c++ std:: map?

Карты отлично справляются с задачами, но они являются родителями памяти и страдают от проблем с кешированием. И когда у вас есть карта в критической петле, которая может быть плохой.

Итак, мне было интересно, может ли кто-нибудь рекомендовать другой контейнер с одним и тем же API, но использует let вместо векторной или хэш-реализации вместо реализации дерева. Моя цель здесь - обменять контейнеры и не переписывать весь код пользователя, который полагается на карту.

Обновление: производительность считается лучшим решением - это проверенный фасад карты на std::vector

Ответ 1

Смотрите Loki:: AssocVector и/или hash_map (большинство реализаций STL имеют этот).

Ответ 2

Вы можете использовать std:: tr1:: unordered_map, который уже присутствует в большинстве реализаций STL, и является частью стандарта С++ 0x.

Вот текущая подпись:

template <class Key,
          class T,
          class Hash = std::tr1::hash<Key>,
          class Pred = std::equal_to<Key>,
          class Alloc = std::allocator<std::pair<const Key, T> > >
class unordered_map;

Ответ 4

Если ваш ключ является простым типом, который можно очень быстро сравнить, и у вас будет не более нескольких тысяч записей, вы можете повысить производительность, просто поместив свои пары в std::vector и итерации, чтобы найти свое значение.