Prima verifica se soluzioni esistenti come libmemcache soddisfano le tue necessità.
Altrimenti ...
mappe Hash sembra essere la risposta definitiva al vostro requisito. Fornisce o (1) ricerca basata sui tasti. La maggior parte delle librerie STL fornisce una sorta di hash in questi giorni. Quindi usa quello fornito dalla tua piattaforma.
Una volta eseguita la parte, è necessario testare la soluzione per verificare se l'algoritmo di hashing predefinito è sufficientemente buono per le proprie esigenze.
Se non lo è, si dovrebbe esplorare alcuni buoni algoritmi veloci di hashing trovati in rete
- buon numero primo vecchio moltiplicare algo
- http://www.azillionmonkeys.com/qed/hash.html
- http://burtleburtle.net/bob/
- http://code.google.com/p/google-sparsehash/
Se ciò non è sufficiente, è possibile eseguire il rolling di un modulo di hashing da solo, che risolve il problema che hai visto con i contenitori STL che hai testato e uno degli algoritmi di hashing sopra. Assicurati di pubblicare i risultati da qualche parte.
Oh ed è interessante che tu abbia più mappe ... forse puoi semplificare avendo la tua chiave come un numero di 64 bit con i bit alti usati per distinguere la mappa a cui appartiene e aggiungere tutte le coppie di valori chiave a un gigante hash. Ho visto hash che hanno centinaia o migliaia di simboli che funzionano perfettamente sull'algoritmo di hashing dei numeri primi.
È possibile verificare come questa soluzione esegue rispetto a centinaia di mappe .. Credo che potrebbe essere meglio da un punto di vista della memoria profiling ... per favore inviare i risultati da qualche parte se si arriva a fare questo esercizio
credo che più che l'algoritmo di hashing potrebbe essere la costante aggiunta/cancellazione della memoria (può essere evitato?) e il profilo di utilizzo della cache della CPU che potrebbe essere più fondamentale per le prestazioni della vostra applicazione
buona fortuna
È necessario elaborare la ricerca per chiavi nei dati? –
gli aggiornamenti o i recuperi saranno più frequenti? (aggiungi/cancella o leggi/aggiorna che non modifica la chiave) – falstro
http://stackoverflow.com/questions/266206/simple-hashmap-implementation-in-c. Questo forse è un buon punto di partenza. – DumbCoder