C语言中提供的第三方库uthash常用接口

一. 简介

在C语言中,在C语言中,并没有标准库直接支持哈希表这种数据结构。如果要使用哈希表,有两种方法:第一种是自行实现,第二种是使用第三方库提供的哈希表。前面已经学习过了C语言实现哈希表的操作。本文简单学习C语言中第三方库提供的哈希表操作。

常用的第三方库有uthash,GHashTable,khash。本文就学习一下 uthash第三方库中哈希表的操作。

二.  uthash库中常用接口

uthash 第三方库是一个轻量级的哈希表实现方案,通过简单的API提供哈希表操作功能,如插入、查找、删除和遍历等。以宏的形式实现,无需进行额外的编译操作。使用时,只需要把头文件 uthash.h 包含进来即可。

uthash 库中常用的接口
1. 向哈希表中添加新元素

  HASH_ADD_INT(head, keyfield_name, item): 添加整型键的元素
  HASH_ADD_STR(head, keyfield_name, item):添加字符串键的元素

  HASH_ADD_PTR(head, keyfield_name, item):添加指针键的元素

  HASH_ADD(hh, head, keyfield_name, key_len, item):通用添加宏,适用于任何键类型

  HASH_ADD_KEYPTR(hh,head,keyptr,keylen,item):uthash 库中一个更底层的添加元素到哈希表的接口

2. 在哈希表中查找元素

    HASH_FIND_INT(head, key_ptr, out):查找整型键的元素

    HASH_FIND_STR(head, key_ptr, out):查找字符串键的元素

    HASH_FIND_PTR(head, key_ptr, out):查找指针键的元素

    HASH_FIND(hh, head, key_ptr, key_len, out): 通用查找宏

3. 删除元素

  HASH_DEL(head, item): 从哈希表中删除指定元素

4. 哈希表遍历和统计宏

    HASH_ITER(hh, head, item, tmp):安全迭代宏(迭代时可删除元素)

    HASH_COUNT(head):返回哈希表中元素的数量

    HASH_CLEAR(hh, head):清空整个哈希表(但不释放元素内存)

5. 排序宏

HASH_SORT(head, cmp): 根据比较函数对哈希表排序

三. uthash库部分接口的具体使用方法

(1)  HASH_FIND_STR(head, key, out_ptr)

专门用于以字符串作为键值的情况查找哈希表中的条目。

  • head: 指向哈希表头部的指针(结构体指针)
  • key: 要查找(字符串类型的)键(char * 类型)
  • out_ptr: 用来存储查找到的结构体的指针(输出参数)

如果找到了匹配的键,out_ptr 将被设置为对应的结构体指针;否则  为 NULL。

(2) HASH_ADD_STR(head, keyfield, new_node)

专门用于以字符串作为键值的情况添加新条目到哈希表。

  • head: 指向哈希表头部的指针(结构体指针)
  • keyfiled: 结构体中用作键的字段名(char[] 或 char*)
  • new_node: 要添加到哈希表中的结构体指针(结构体指针)
(3) HASH_ITER(hh, head, item, tmp)

逐个访问哈希表中的所有元素。

  • hh: 结构体中定义的 UT_hash_handle hh; 字段名(必须)( UT_hash_handle)
  • head: 哈希表的头指针(结构体指针)
  • item: 当前遍历到的元素指针(输出)(结构体指针)
  • tmp: 临时变量,用于保存下一个节点指针,防止删除时断链(结构体指针)
(4) HASH_DEL(head, delptr)

从哈希表中删除条目(内存需手动释放)。

  • head: 哈希表的头指针(结构体指针)
  • delptr: 指向要删除元素的指针。(结构体指针)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值