这里会简单的说明一下例子中用到的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函数的返回值
标签:glib,hash,函数,句柄,key,func,table From: https://www.cnblogs.com/hshy/p/17292520.html