uthash使用指南

uthash用户使用指南

  • uthash支持哪些操作
    • 如何使用uthash
    • 定义可以使用作hash表的结构体
      • 关于内存
    • 声明哈希表
    • 添加元素
    • 查找元素
    • 删除元素
    • 遍历元素
    • 计数
    • 排序

我们利用哈希表可以通过键值对的方式处理元素,即哈希表中存储键-值形式的数据,关键字是唯一的。uthash是利用结构体,宏定义等形式实现的一个具有哈希表特点和功能的开源代码模块。

uthash支持哪些操作

1.添加/替换(add/replace)
2.查找(find)
3.删除(delete)
4.计数(count)
5.遍历(iterate)
6.排序(sort)

如何使用uthash

添加头文件即可

#include "uthash.h"

定义可以使用作hash表的结构体

struct hashTable{
	int key;
	char name[10];
	UT_hash_handle hh;	/*使结构体作为哈希表的关键*/
};

关于内存

可以使用HASH_OVERHEAD字段查看哈希表的开销大小(以字节为单位)

声明哈希表

struct hashTable *hashtable=NULL/*hash表必须声明为指向你定义的结构体的空初始化指针*/

添加元素

void add_key(int ikey,char *name){
	struct hashTable *tmp;
	HASH_FIND_INT(hashtable,&ikey,tmp);
	if(tmp==NULL){
		tmp=malloc(sizeof(struct hashTable));
		tmp->key=ikey;
		HASH_ADD_INT(hashtable,key,tmp);
	}
	strcpy(tmp->name,name);
}

HASH_ADD_INT()的第一个参数为哈希表,第二个参数是键字段名称,最后一个参数是指向要添加的结构的指针。
HASH_ADD_INT:为键类型为int的哈希表添加元素;uthash还提供
HASH_ADD_STR():字符串类型,HASH_ADD_PTR():指针类型

将哈希指针传递给函数,应该写成

void add_user(struct hashTable **users,int user_id,char *name){
	HASH_ADD_INT(*users,id,s);
}

查找元素

struct hashTable *find_key(int ikey)
{
	struct hashTable* tmp;
	HASH_FIND_INT(hashtable,&ikey,tmp);
	return tmp;
}

删除元素

void delete_key(struct hashTable * tmp)
{
	HASH_DEL(hashtable,tmp);
	free(tmp);
}

遍历元素

void delete_all(){
	struct hashTable *current_user, *tmp;
	HASH_ITER(hh,hashtable,current_user,tmp)
	{
		HASH_DEL(hashtable,current_user);
		free(current_user);
	}
}

计数

unsigned int num_users;
num_users=HASH_COUNT(hashtable);

排序

int by_key(const struct hashTable*a,const struct hashTable*b)
{
	return (a->key-b->key);
}
HASH_SORT(hashtable,by_key);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值