我需要某种 C 中可以动态增长的 HashSet。我当然可以自己写所有东西,但也许有一个很好的库?我的密钥是 32 位散列,我需要将指针 ( struct dirent *
) 保存为值。
问问题
13389 次
3 回答
3
我会(一如既往)推荐漂亮的GLib(GTK+ 的一部分)。它具有GHashTable
实现哈希表的 API。它根据需要动态增长。
要使用 32 位密钥,请在创建哈希表时引用g_int_hash()
和函数。g_int_equal()
于 2013-01-31T14:45:51.823 回答
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);
于 2015-06-05T20:21:54.263 回答
1
我成功使用了这个:KoanLogic Libu - Hmap module
链接中的示例足以自我解释。为了您的需要,我猜您应该使用U_HMAP_OPTS_DATATYPE_OPAQUE
数据类型并将密钥的长度设置为 4 个字节u_hmap_opts_set_val_sz()
。
于 2013-01-31T12:55:06.320 回答