Vérifiez d'abord si des solutions existantes comme libmemcache répondent à vos besoins.
Sinon ...
cartes Hash semble être la réponse définitive à votre exigence. Il fournit une recherche o (1) basée sur les clés. La plupart des bibliothèques STL fournissent une sorte de hachage ces jours-ci. Utilisez donc celui fourni par votre plate-forme. Une fois cette partie terminée, vous devez tester la solution pour voir si l'algorithme de hachage par défaut est suffisamment performant pour vos besoins.
Dans le cas contraire, vous devriez explorer quelques bons algorithmes de hachage rapide trouvées sur le net
- bon vieux nombre premier se multiplient algo
- http://www.azillionmonkeys.com/qed/hash.html
- http://burtleburtle.net/bob/
- http://code.google.com/p/google-sparsehash/
Si ce n'est pas suffisant, vous pouvez lancer un module de hachage e par vous-même, cela résout le problème que vous avez vu avec les conteneurs STL que vous avez testés, et l'un des algorithmes de hachage ci-dessus. Assurez-vous de poster les résultats quelque part. Oh et c'est intéressant que vous ayez plusieurs cartes ... peut-être vous pouvez simplifier en ayant votre clé en 64 bits avec les bits élevés utilisés pour distinguer à quelle carte il appartient et ajouter toutes les paires de valeur de clé à un géant hacher. J'ai vu des hachages qui ont une centaine de milliers de symboles qui fonctionnent parfaitement bien sur l'algorithme de hachage des nombres premiers de base.
Vous pouvez vérifier cette solution effectue par rapport à des centaines de cartes .. Je pense que cela pourrait être mieux d'un point de vue de profilage de la mémoire ... s'il vous plaît ne postez les résultats quelque part si vous obtenez de faire cet exercice
Je crois que plus que l'algorithme de hachage, il pourrait être l'ajout/suppression de la mémoire constante (peut-il être évité?) et le profil d'utilisation du cache de cpu qui pourrait être plus cruciale pour la performance de votre application
bonne chance
Avez-vous besoin de traiter la recherche par clés dans vos données? –
les mises à jour ou récupérations seront-elles plus fréquentes? (ajouter/supprimer, ou lire/mettre à jour qui ne change pas la clé) – falstro
http://stackoverflow.com/questions/266206/simple-hashmap-implementation-in-c. C'est peut-être un bon endroit pour commencer. – DumbCoder