Je suis principalement intéressé par les clés de chaîne. Quelqu'un peut-il me diriger vers une bibliothèque?
J'ai eu le même besoin et j'ai fait des recherches et j'ai fini par utiliser libcf
C'est simple et lisible donc si j'ai un besoin de modification, je peux le faire sans trop de temps pour comprendre. Il s'agit également d'une licence BSD. Pas besoin de changer mes structures (pour incorporer disons un prochain pointeur)
J'ai dû rejeter les autres options pour les raisons suivantes (mes raisons personnelles, YMMV):
En résumé, pour une utilisation très simple, strmap est bon; uthash si vous êtes préoccupé par l'utilisation de mémoire supplémentaire. Si seule la vitesse de développement ou la facilité d'utilisation est l'objectif principal, libcfu gagne [note que libcfu fait en interne l'allocation de mémoire pour maintenir les nœuds/tables de hachage]. Il est surprenant qu'il n'y ait pas beaucoup d'implémentations de hachage C simples disponibles.
GLib est une excellente bibliothèque à utiliser comme base dans vos projets C. Ils ont des offres de structure de données décentes, y compris des tables de hachage: http://developer.gnome.org/glib/2.28/glib-Hash-Tables.html (lien mis à jour le 4/6/2011)
Pour les chaînes, le Judy Array pourrait être bon.
Un tableau Judy est une structure de données de tableau associatif complexe mais très rapide pour stocker et rechercher des valeurs à l'aide de clés entières ou de chaînes. Contrairement aux tableaux normaux, les tableaux Judy peuvent être clairsemés; c'est-à-dire qu'ils peuvent avoir de larges plages d'indices non attribués.
Voici une bibliothèque Judy dans [~ # ~] c [~ # ~] .
Une bibliothèque C qui fournit une technologie de base de pointe qui implémente une matrice dynamique clairsemée. Les tableaux Judy sont déclarés simplement avec un pointeur nul. Une baie Judy ne consomme de la mémoire que lorsqu'elle est remplie, mais peut évoluer pour profiter de toute la mémoire disponible si vous le souhaitez.
Autres références,
Ce référence d'implémentation de hachage Wikipedia a quelques C
liens open source.
En outre, cmph - Une bibliothèque de hachage parfaite minimale dans C
, prend en charge plusieurs algorithmes.
Un long moment s'est écoulé depuis que j'ai posé cette question ... Je peux maintenant ajouter ma propre bibliothèque du domaine public à la liste:
Interfaces et implémentations C de Dave Hanson comprend une table de hachage fine et plusieurs autres structures de données bien conçues. Il y a aussi une belle interface de traitement des chaînes. Le livre est génial si vous pouvez vous le permettre, mais même si ce n'est pas le cas, j'ai trouvé ce logiciel très bien conçu, assez petit pour apprendre dans son intégralité et facile à réutiliser dans plusieurs projets différents.
Il y a de bonnes réponses ici:
Classe de conteneur/bibliothèque pour C
http://sglib.sourceforge.net .
http://cbfalconer.home.att.net/download/
C Interfaces et implémentations traite des implémentations de table de hachage en C. Le code source est disponible en ligne . (Ma copie du livre est au travail, donc je ne peux pas être plus précis.)
La bibliothèque APR d'Apache a sa propre hash-implementation . Il est déjà porté sur tout ce sur quoi Apache s'exécute et la licence Apache est également assez libérale.
khash.h de samtools/bwa/seqtk/klib
curl https://raw.github.com/attractivechaos/klib/master/khash.h
Je ne l'ai jamais utilisé mais Google Sparsehash peut fonctionner
Téléchargez tcl et utilisez leur fonction de hachage tcl éprouvée. C'est facile. L'API TCL est bien documentée.
Gperf - Générateur de fonctions de hachage parfait
http://www.ibm.com/developerworks/linux/library/l-gperf.html