Najpierw sprawdź, czy istniejące rozwiązania, takie jak libmemcache, odpowiadają Twoim potrzebom.
Jeśli nie ...
Mapy z haszowaniem wydają się być ostateczną odpowiedzią na Twoje wymagania. Zapewnia wyszukiwanie o (1) na podstawie kluczy. Większość bibliotek STL udostępnia obecnie pewnego rodzaju skróty. Skorzystaj więc z tego, który zapewnia Twoja platforma.
Po wykonaniu tej części musisz przetestować rozwiązanie, aby sprawdzić, czy domyślny algorytm haszowania jest wystarczająco dobry pod względem wydajności dla Twoich potrzeb.
Jeśli tak nie jest, powinieneś zapoznać się z dobrymi algorytmami szybkiego haszowania znalezionymi w sieci
- dobra stara liczba pierwsza pomnóż algo
- http://www.azillionmonkeys.com/qed/hash.html
- http://burtleburtle.net/bob/
- http://code.google.com/p/google-sparsehash/
Jeśli to nie wystarczy, możesz samodzielnie rzucić moduł haszujący, który rozwiązuje problem, który widziałeś z przetestowanymi kontenerami STL i jednym z algorytmów haszujących powyżej. Pamiętaj, aby gdzieś opublikować wyniki.
Aha i to ciekawe, że masz wiele map ... być może możesz uprościć, mając swój klucz jako 64-bitową liczbę z wysokimi bitami używanymi do rozróżnienia, do której mapy należy, i dodania wszystkich par klucz-wartość do jednego gigantycznego skrótu. Widziałem hashe, które mają około stu tysięcy symboli, które działają doskonale na podstawowym algorytmie haszowania liczb pierwszych.
Możesz sprawdzić, jak to rozwiązanie działa w porównaniu z setkami map ... myślę, że to mogłoby być lepsze z punktu widzenia profilowania pamięci ... proszę, opublikuj gdzieś wyniki, jeśli wykonasz to ćwiczenie
Uważam, że czymś więcej niż algorytmem haszowania może być ciągłe dodawanie / usuwanie pamięci (czy można tego uniknąć?) I profil użycia pamięci podręcznej procesora, które mogą być bardziej kluczowe dla wydajności aplikacji
powodzenia