Сначала проверьте, подходят ли существующие решения, такие как libmemcache, вашим потребностям.
Если не ...
Хеш-карты кажутся однозначным ответом на ваши требования. Он обеспечивает поиск o (1) на основе ключей. В наши дни большинство библиотек STL предоставляют какой-то хэш. Так что используйте тот, который предоставляется вашей платформой.
Как только эта часть будет завершена, вы должны протестировать решение, чтобы убедиться, что алгоритм хеширования по умолчанию достаточно хорош для ваших нужд.
Если это не так, вам следует изучить несколько хороших алгоритмов быстрого хеширования, которые можно найти в сети.
- старый добрый алгоритм умножения простых чисел
- http://www.azillionmonkeys.com/qed/hash.html
- http://burtleburtle.net/bob/
- http://code.google.com/p/google-sparsehash/
Если этого недостаточно, вы можете самостоятельно скатить модуль хеширования, который устранит проблему, которую вы видели с тестированными контейнерами STL, и одним из алгоритмов хеширования, описанных выше. Обязательно где-нибудь выложите результаты.
О, и это интересно, что у вас есть несколько карт ... возможно, вы можете упростить, используя свой ключ в виде 64-битного числа с старшими битами, используемыми для различения, какой карте он принадлежит, и добавления всех пар значений ключа в один гигантский хеш. Я видел хэши, содержащие около сотни тысяч символов, которые отлично работали с базовым алгоритмом хеширования простых чисел.
Вы можете проверить, как это решение работает по сравнению с сотнями карт ... я думаю, что это могло бы быть лучше с точки зрения профилирования памяти ... пожалуйста, опубликуйте результаты где-нибудь, если вам удастся выполнить это упражнение
Я считаю, что больше, чем алгоритм хеширования, это может быть постоянное добавление / удаление памяти (можно ли этого избежать?) И профиль использования кеша процессора, который может быть более важным для производительности вашего приложения.
удачи