C中的动态哈希集

时间:2013-01-31 12:29:57

标签: c hash set

我需要C中的某种HashSet,它可以动态增长。我当然可以自己写一些东西,但也许有一个好的lib呢? 我的密钥是32位哈希,我需要将指针(struct dirent *)保存为值。

3 个答案:

答案 0 :(得分:3)

更新:请勿将此图书馆用于字符串!
有关详细信息,请参阅此票证:https://github.com/avsej/hashset.c/issues/4

来自Couchbase的HashSet代码看起来不错:

https://github.com/avsej/hashset.c

示例:

#include "hashset.h"

char *foo = "foo";
char *missing = "missing";
hashset_t set = hashset_create();

if (set == NULL) {
    fprintf(stderr, "failed to create hashset instance\n");
    abort();
}

hashset_add(set, foo);
assert(hashset_is_member(set, foo) == 1);
assert(hashset_is_member(set, missing) == 0);

答案 1 :(得分:2)

我会推荐(一如既往)好的GLib (part of GTK+)。它具有实现哈希表的GHashTable API。它会根据需要动态增长。

要使用32位密钥,请在创建哈希表时引用g_int_hash()g_int_equal()函数。

答案 2 :(得分:1)

我成功使用了这个:KoanLogic Libu - Hmap module

链接中的示例足以自我解释。 根据您的需要,我猜您应该使用U_HMAP_OPTS_DATATYPE_OPAQUE作为数据类型,并使用u_hmap_opts_set_val_sz()将密钥长度设置为4个字节。