哈希C哈希查找

y4ekin9u  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(158)

我有一个大学的作业,我想用库Uthash来实现一个包含set,get和delete函数的hashtable,Hashtable是我们的结构体,包含一个键,它的长度,一个值,它的长度和一个UT_hash_handle(看起来是必要的)。
该结构体如下所示:

typedef struct hashtable {
    unsigned char *key;
    size_t k_len; 
    unsigned char *value; 
    size_t v_len;
    UT_hash_handle hashhandle;
} hashtable;

我们预定义的函数头如下:

hashtable get_value(hashtable **ht, const unsigned char *key, size_t key_len);

关于我们的任务,我应该使用来自uthash的HASH_FIND-函数通过键来获得一个hashvalue.我认为这会很容易(很可能是),但遗憾的是我不了解HASH_FIND-函数的详细用法,官方文档也没有太大帮助,因为它只显示了HASH_FIND_INT的用法.
HASH_FIND需要我给予它五个参数:

HASH_FIND(hh, head, keyptr, keylen, out)

这些值(应该用于keyptrkeylen)没有问题(我只给予它参数keykey_len,我在函数中将它们作为参数接收).对于值out,我认为我应该从hashtable-struct创建一个新的struct并将其赋给HASH_FIND.对于head参数,我认为只需要给予hashtable一个指针(根据我们的规范,它是函数的一个参数),但是hash_handle到底是什么意思?我应该从预定义的struct中得到hash_handle-value,然后把它给HASH_FIND吗?
谢谢你帮我!
我想使用来自uthash的HASH_FIND从哈希表中查找一个值。

ni65a41a

ni65a41a1#

hh是值结构体的UT_hash_handle成员的名称(为了方便,像HASH_FIND_INT这样的宏被硬编码为hh),所以这里就使用hashhandle
out参数应该是hashtable *,它将被设置为指向找到的元素,或者如果没有找到,则被设置为NULL

相关问题