我有一个大学的作业,我想用库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)
这些值(应该用于keyptr
和keylen
)没有问题(我只给予它参数key
和key_len
,我在函数中将它们作为参数接收).对于值out,我认为我应该从hashtable-struct创建一个新的struct
并将其赋给HASH_FIND
.对于head参数,我认为只需要给予hashtable一个指针(根据我们的规范,它是函数的一个参数),但是hash_handle到底是什么意思?我应该从预定义的struct中得到hash_handle-value,然后把它给HASH_FIND
吗?
谢谢你帮我!
我想使用来自uthash的HASH_FIND
从哈希表中查找一个值。
1条答案
按热度按时间ni65a41a1#
hh
是值结构体的UT_hash_handle
成员的名称(为了方便,像HASH_FIND_INT
这样的宏被硬编码为hh
),所以这里就使用hashhandle
。out
参数应该是hashtable *
,它将被设置为指向找到的元素,或者如果没有找到,则被设置为NULL
。