"uthash.h"是一个非常好用的C语言关于哈希表的开源库,现将此使用方法做一记录。
“uthash.h”直接从GitHub上Clone就行了。
使用时#include "uthash.h"即可。
下面重点说一下相关函数使用方法。
首先需要一个结构体:
struct hash_table{
int key;
int value; //any type
UT_hash_handle hh; //necessary
};
typedef struct hash_table* hash_ptr;
key和value的类型可以变,hh这个句柄必须要有。
插入:
根据key的类型使用不同的函数。
int:HASH_ADD_INT
字符串: HASH_ADD_STR
pointer: HASH_ADD_PTR
其他类型: HASH_ADD
前面几个实质上都调用了最后一个HASH_ADD。
比如:
hash_ptr elem, table = NULL; //table为创建的哈希表,elem是插入时使用的节点
//table必须初始化为NULL
elem = (hash_ptr)malloc(sizeof(struct hash_table));
elem->key = mykey;
elem->value = myvalue;
HASH_ADD_INT(table, key, elem); //第二个参数为哈希表作为key的变量的名字
查找:
同理,按类型使用不同的函数。
比如key为int: HASH_FIND_INT
为使用方便,可以自己写一个根据key查找的函数, 返回结构体指针。
hash_ptr find_node(hash_ptr table, int key)
{
if(!table)
return NULL;
hash_ptr s;
HASH_FIND_INT(table, &key, s);
return s;
}