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