Посмотрите на это: Google Sparse Hash Map .Это была моя любимая библиотека C ++ с тех пор, как я наткнулся на нее несколько лет назад.
Ее производительность невероятна, у нее есть и карта, и заданный класс, и запрошенные резервные функции.Я переключил бесчисленные проекты с различных других подобных карту структур данных на google sparsehash с невероятными результатами.Синтаксис совместим с C ++ 0x unordered_map
(ужасное, ужасное имя!), Но также имеет дополнительные функции и возможности.
Внутренне он реализован с помощью хеш-таблицы с использованиемТехника разреженного хэширования.
РЕДАКТИРОВАТЬ (13 мая 2015 г.)
Поскольку это стало популярным ответом, я просто хотел указать на две другие подобные карте структуры, которые я использовал в последние годы.Библиотека M различна C ontainer T emplates (MCT) предоставляет встроенные высокопроизводительные реализации unorderd_map в нескольких вариантах:
Предоставляет шесть контейнеров хеш-таблицы общего назначения - closed_hash_set, closed_hash_map, connected_hash_set, connected_hash_map, forward_hash_set и forward_hash_map.Первые два очень похожи на TR1 unordered_set и unordered_map.Связанные предоставляют дополнительную функциональность, в то время как прямые хеш-таблицы более эффективны, чем связанные, но имеют ограниченный интерфейс.В некоторых случаях производительность контейнеров closed_hash_ * может быть еще более улучшена с помощью дополнительной поддержки навязчивости.
И folly от Facebook имеет несколько действительно хороших структур.Они не имеют самозаменяемой замены unordered_map как таковой, но есть реализация unordered_map без блокировок / потокобезопасности, и построение порядка fbvector
может привести к значительному увеличению производительности благодаря лучшему использованию памяти и расположению.
В моем тестировании для однопоточного кода Google dense_hash_map
по-прежнему является моим предпочтительным вариантом для максимальной производительности.