uthash 哈希表在C语言中的使用

1 uthash 简介

uthash 哈希的实现很简单,它不是一个库,只是一个头文件,使用的时候incluede进去就行了

#include "uthash.h"

关于 uthash 的官方文档 :

 https://troydhanson.github.io/uthash/userguide.html#_a_hash_in_c

下载头文件源码: 

GitHub - troydhanson/uthash: C macros for hash tables and more

uthash 支持哈希表的如下操作:

  1. add/replace

  2. find

  3. delete

  4. count

  5. iterate

  6. sort

uthash 的使用

2.1 创建自己的哈希结构

以定义一个 学生信息为例,使用学号id 当做哈希表中的key,这个key是唯一的,类型也可以是任意的类型,这里根据需要定义为int类型,name也是根据需要自定义的,也可以是其它类型的,也可以不定义。

#include "uthash.h"

struct my_struct {
    int id;                    /* key , unique , can be any type, char/pointer,etc */
    char name[10];             /* can not use */
    UT_hash_handle hh;         /* makes this structure hashable */
};

2.2 声明哈希表

注意,这个声明一个全局变量,哈希表的头,一定要初始化为NULL

struct my_struct *users = NULL;    /* important! initialize to NULL */

如果不想定义全局变量,想要以参数的形式,需要注意,一定要使用二重指针,不然是不正确的。

这部分官方文档有说明:

/* bad */
void add_user(struct my_struct *users, int user_id, char *name) {
  ...
  HASH_ADD_INT(users, id, s);
}


/* good */
void add_user(struct my_struct **users, int user_id, char *name) { ...
  ...
  HASH_ADD_INT(*users, id, s);
}

2.3 哈希表中 add item

如果key是 int 类型, HASH_ADD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值