首页 > 其他分享 >glib g_hash_table_new g_hash_table_new_full

glib g_hash_table_new g_hash_table_new_full

时间:2023-04-06 13:56:25浏览次数:27  
标签:key hash 函数 句柄 func new table

 这里会简单的说明一下例子中用到的api接口。

  GHashTable *g_hash_table_new(GHashFunc hash_func, GEqualFunc key_equal_func);

  功能:生成hash表。

  参数:hash_func 创建hash值得函数,它为key创建一个hash值。这里可以用glib函数库里自带的g_str_hash。也可以用自己的创建的函数来建立规则

     key_equal_func 用来比较key的函数,当入库时会进行key的比较。同样这里也可以 用glib自带的g_int_equal。也可以用自己的创建的函数来建立比较规则。

  返回值:返回一个句柄。

  

  GHashTable* g_hash_table_new_full(GHashFunc hash_func,GEqualFunc key_equal_func, GDestroyNotify key_destroy_func, GDestroyNotify value_destroy_func);

  功能:同样是用来创建hash表的。比g_hash_table_new多了两个数据处理函数,相当于g_hash_table_new进阶版。因为在实际项目中很多都是需要进行内存管理。所以我们的例子用到的是这个函数。会用这个就会用上面那个了

  参数:hash_func 创建hash值得函数,它为key创建一个hash值。这里可以用glib函数库里自带的g_str_hash。也可以用自己的创建的函数来建立规则

     key_equal_func 用来比较key的函数,这个函数在哈希表查找键值时使用。同样这里也可以 用glib自带的g_int_equal。也可以用自己的创建的函数来建立比较规则。

     key_destroy_func key数据处理函数,用来释放内存 。

     value_destroy_func value数据处理函数,用来释放内存

  返回值:返回一个句柄

  

  void g_hash_table_insert(GHashTable *hash_table, gpointer key, gpointer value);

  功能:向hash表中插入数据。

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

     key:hash表键

     value:hash表的值

  

  void g_hash_table_foreach(GHashTable *hash_table, GHFunc func, gpointer user_data);

  功能:hash表遍历函数,用来遍历hash表

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

     func 回调函数,没遍历到一个key-value就回调此函数,对数据进行处理。

     user_data:给回调函数传入的参数。

  

  void g_hash_table_destroy(GHashTable *hash_table);

  功能:释放hash表

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

 

在本文的实例中会用到上面的那些api接口。当然glib的hash函数接口肯定是不止上面那些的,这里只是一些简单的使用,下面是一些没用到的函数接口介绍,以后有时间在慢慢补到实例中去,其实不写看介绍一般也会用了。

  guint g_hash_table_size(GHashTable *hash_table);

  功能:返回表中键值对的个数

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

 

  gpointer g_hash_table_lookup(GHashTable *hash_table, gconstpointer key);

  功能:通过key去查找相对应的值。这个函数不会去判断这个key值是否存在的,在使用前要确保key不为NULL。

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

      key:要查找的key。

 

  gboolean g_hash_table_remove(GHashTable *hash_table, gconstpointer key);

  功能:删除指定key的键值对。注意这个函数不会释放键值对的内存。所以如果使用 g_hash_table_new_full函数就比较方便了,会在删除的时候去回调函数释放。如果使用的是g_hash_table_new。就需要我们自己去释放内存了。这里需要注意

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

      key:要删除的指定key

 

  gpointer g_hash_table_find(GHashTable *hash_table, GHRFunc predicate, gpointer user_data);

  功能:查找特定的键值对。会遍历hash表回调predicate函数判断自己定义规则的键值对。ture表示找到。

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

      predicate 回调函数,用来定义特定键值对的规则。

     user_data 传入回调函数的参数

 

  void g_hash_table_replace(GHashTable *hash_table, gpointer key, gpointer value);

  功能:向hash表中插入键值对。与g_hash_table_insert不同的是,如果插入的key已经存在这个会替换原来的key与value。g_hash_table_insert只会替换值

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

      key:插入的键

        value:插入的值

 

  GList* g_hash_table_get_keys(GHashTable *hash_table);

  功能:获取hash表中所有的键

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

 

  GList* g_hash_table_get_values(GHashTable *hash_table);

  功能:获取hash表中所有的值

  参数:hash_table:hash表的句柄,1 ,2函数的返回值

 

标签:key,hash,函数,句柄,func,new,table
From: https://www.cnblogs.com/hshy/p/17292522.html

相关文章

  • 1688关键字搜索新品数据API接口(item_search_new-按关键字搜索新品数据)
    1688关键字搜索新品数据API接口(item_search_new-按关键字搜索新品数据)代码接口教程如下:公共参数名称类型必须描述key String 是 调用key(必须以GET方式拼接在URL中)secret String 是 调用密钥api_name String 是 API接口名称(包括在请求地址中)[item_search,item_get,item_search......
  • 无备份情况下恢复MySQL truncate table
    近期陆续有客户遇到MySQL的数据库问题,最近正好开始研究MySQL的一些技术。大家都知道我之前是擅长Oracle恢复,如果不会MySQL数据库恢复,总感觉却少一点什么。既然如此,就顺道研究一下吧。幸运的是,Google能够发现一些针对MySQL的恢复文章以及一些工具。我们都知道,MySQLServer都很多存......
  • 数据重塑图解Pivot, Pivot-Table, Stack and Unstack
    行转列,列转行 [pandas学习笔记3—数据重塑图解Pivot,Pivot-Table,StackandUnstack_Lavi_qq_2910138025的博客-CSDN博客](https://blog.csdn.net/liuweiyuxiang/article/details/78220530)文章目录数据重塑图解—Pivot,Pivot-Table,StackandUnstack引言Pivot常......
  • concurrentHashMap为什么是线程安全的?
    ConcurrentHashMap是线程安全的。它可以被多个线程同时使用而不需要额外的同步措施(比如使用synchronized)来保证线程安全。这是因为ConcurrentHashMap内部使用了一些非常高效的机制来保证线程安全,包括:分段锁:ConcurrentHashMap将数据分成多个段,每个段都有自己的锁。这样,在多线程......
  • 【win10】本地化部署stable diffusion AI绘图
    一、环境本地化部署运行虽然很好,但是也有一些基本要求(1)需要拥有NVIDIA显卡,GT1060起,显存4G以上(2)操作系统需要win10(3)电脑内存16G或者以上。(4)有些网页打不开,有时下载很慢。 二、安装miniconda1.安装miniconda这个是用来管理python版本的,他可以实现python的多版本切换。下......
  • 网络防火墙iptables
    防火墙简单介绍概念:是一种能够限制所转发的流量类型的路由器类型:1.代理防火墙本质上是运行一个或多个应用层网关的主机1.1HTTP代理防火墙只能用于HTTP和HTTPS协议(Web)。可以提供web缓存功能,加速防火墙内用户加载网页的速度提供黑名单功能,阻止用户访问某些web网站1.2......
  • new操作符的原理
    首先这里是一个构造函数:functionFun(age,name){this.age=agethis.name=name}这个是创建的函数:functioncreate(fn,...args){1.创建了一个空对象varobj={}2.将空对象的原型指向构造函数的对象Object.setPrototypeOf(obj,fn.prototype)3.将空对象作为构造函数的上下......
  • hash哈希表
    当我们想在内存中通过关键字寻找特定数据时(键值对),总是希望能快速找到所需数据,在无索引的情况使用二分查找、二叉树、b数也只能在O(lgn)的时间复杂度上查找。而通过对数据的关键字和其存储位置建立对应关系f,使得每个关键字通过f能唯一确定一个储存位置,那么就能通过对关键字的查......
  • 记几次 [线上环境] Dubbo 线程池占满原因分析(第二次:CompletableFuture)
    转载:https://blog.csdn.net/wsmalltiger/article/details/124236189文章目录[线上环境]Dubbo线程池占满原因排查系列前言一、问题分析1、分析日志2、定位原因二、解决方案三、总结前言  某天早上9点左右收到线上故障报警,超过3个商家反馈“无法正常进入功能页面,点击相关操作提......
  • 搭一下 Stable Diffusion WebUI
    Preface前不久看到好多朋友用上StableDiffusion来做原画,然后又配合上了Chatgpt。一直以来都想尝试一下,奈何2014款的双核mac跑个idea都发出了拖拉机的轰鸣声。所以一直都是看一半就搁置。然而,这也耐不住心情低落想要一些东西来分散自己的注意力,今天我就和他杠上了。硬件Mac......