3

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

4

3 回答 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 回答