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