我有一个大学作业,应该使用库uthash来实现一个哈希表,包括set-, get-和delete-函数。哈希表是我们的结构体,它包含一个键、它的长度、一个值、它的长度和一个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;
我们预定义的function-head如下:
hashtable get_value(hashtable **ht, const unsigned char *key, size_t key_len);
关于我们的任务,我应该使用来自uthash的HASH_FIND
-函数来按键获取哈希值。我认为这很容易(可能是),但遗憾的是,我不了解HASH_FIND
-功能的使用细节和官方文档不是很有帮助,因为它只是显示了HASH_FIND_INT
的使用。
那么,HASH_FIND
希望我给它五个参数:
HASH_FIND(hh, head, keyptr, keylen, out)
我应该为keyptr
和keylen
使用的值没有问题(我只是给它参数key
和key_len
,我在函数中作为参数接收)。对于值,我认为我应该从我们的哈希表结构中创建一个新的struct
,并将其交给HASH_FIND
。对于head参数,我认为只需要给出指向我的哈希表的指针(根据我们的规范,我将其作为函数的参数)。但是hash_handle到底是什么意思呢?我是否应该从预定义的结构中获取hash_handle-value,然后将其交给HASH_FIND
?
谢谢你的帮助!
我想从uthash中使用HASH_FIND
从哈希表中查找一个值。
hh
意味着是值结构的UT_hash_handle
成员的名称(在方便的宏中,如HASH_FIND_INT
被硬编码为hh
),所以这里只是hashhandle
。
参数out
应该是一个hashtable *
,它将被设置为指向找到的元素,如果没有找到则指向NULL
。