`
mypyg
  • 浏览: 545557 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

glib中hash表函数的使用(ghash)

 
阅读更多
在使用ghash看其文档时对insert的介绍是如果key值相同的value再插入时会被替换,对于判断key值相等的标准不太清楚,是hash值相等的话发生hash碰撞时不就麻烦了,于是结合文档以及其源代码,自己写代码做了下验证,结果如下文描述。





1.创建新hash表:

GHashTable*         g_hash_table_new                    (GHashFunc hash_func,
                                                         GEqualFunc key_equal_func);



第一个函数用来把key转换成hash值;第二个函数用来精确确认key。



hash_func说明:

"str1", "str2", "str3", "str11" 这是4个key串

自定义一个hash_func,将串的第4个字符转换成数字作为hash值,那么对应得到4个hash值分别是:

1, 2, 3, 1



key_equal_func的调用时机(以上面的hash_func来说明):

1.向表中添加新元素时可能会调用:(当不同的key产生了同样的hash值,发生了碰撞时会调用)

  (1)插入key值"str1"以及其对应的value,此时hash值1在表中是唯一的,不会调用

   (2) 插入"str2", "str3",hash值2,3仍然时唯一的,不会调用

   (3) 插入"str11",其hash值为1,但是位置1已经有内容了,此时就会调用key_equal_func,来判断这两个key值是不是真的一样。如果 key_equal_func()返回true,那么认为这两个key值是一样的,原来的value就会被替换掉。如果返回false,那么就会作为一个新元素插入,虽然他们两个配对key的hash值是一样的。如果大量这样的情况发生,就是hash_func函数选择的不好了。(glib中自带了一些 hash函数,这些可以看文档)



2.查找表中的元素时肯定会调用:

  比如要查找"str11"对应的value,会首先计算其hash值为1,然后在hash表中查找对应此hash值的元素,可能有多个,为了确认是不是自己要找的,所以会调用key_equal_func(),如果返回true,表示确实是这个key对应的元素,如果返回false,那么说明虽然hash 值一样,但是实际key并不一样,这个元素不是要找的。
分享到:
评论

相关推荐

    glib函数手册 函数大全

    glib函数手册,作为参考书不错,可以查找到你想用的glib函数。我用的就是这个

    GLib 中文参考手册

    GLib中文参考手册,学习GLib库的好帮手,提高自己的C语言开发水平。

    LinuxC的glib库GHashTable用法.pdf

    LinuxC的glib库GHashTable用法·整理 hash数据结构的基本用法,很全、很详细。

    glib常用库函数总结

    glib常用库操作说明,包括基本类型,断言,宏调试,单/双向链表,存储管理,计时器,字符串处理,错误处理,事件,线程,object对象使用 等等

    glib hash table

    做工程需要 hash table,而 VC6 没有提供,GLIB中的hash table 简单易用,于是拆出来用。

    glib-win32 windows下编译的glib,可直接包含头文件使用

    在windwos下编译出来的glib库,可以直接包含头文件进行使用,在整个编译过程中比较的繁杂,依赖项太多,差点吐血了,还好最终还是编译出来了,亲测可用

    如何使用Glib工具集管理C数据

    使用 GLib 工具集管理 C 数据:组织数据、单向链表、双向链表、散列表、数组、树、队列

    GLib 2.10.3 CHM手册

    glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性。glib是 Gtk+库和Gnome的基础。glib可以在多个平台下使用,比如Linux、Unix、Windows等。glib为 许多标准的、常用的C语言结构提供了相应的...

    浅谈Windows系统下C语言编程中Glib库的使用

    在这个C的变成世界里,有许多实用的库,其中最有名的且最通用(跨多个平台的实现包括...如果在程序中要使用到glib库中的函数,则应该包含glib.h头文件(在gtk.h和gnome.h头文件中已经包含了glib.h了。 但是,因为这是

    dbus-glib使用教程

    对dbus-glib的使用框架进行了说明,分为服务端和客户端,分别对方法和信号进行了说明

    Glib参考手册

    跨平台开发时基本都会用到Glib。文档是Glib的参考手册。英文,pdf

    GLib Reference Manual for GLib 2.16.1

    GLib Reference Manual for GLib 2.16.1 GLib 参考手册

    ghash改造独立版源码

    经典的glib hashtable,改写拆解成可单独使用的工具。

    glib-2.12.11.zip

    GLib是一种底层库,创建GDK和GTK应用程序时该库提供许多有用的定义和函数。 包括基本类型及限制的定义、标准宏、类型转化、...最后GLib具有很好的移植性,所以使用GLib作为底层应用支持,那么也保证了应用的可移植性。

    qemu安装时必须的glib库

    在安装qemu的时候,在你安装了zlib之后,系统可能会提示你缺少glib-2.0,那么把这个软件包下载了吧!

    glib-2.0 源码

    g l i b库是L i n u x平台下最常用的 C语言函数库,它具有很好的可移植性和实用性。... h中的头文件很容易理解,很多函数从字面上都能猜出它的用处 和用法。如果有兴趣,g l i b的源代码也是非常好的学习材料。

    glib的windows版本

    glib的Windows版本开发库,包含头文件及lib,运行时的动态库

    glib-2.63.3.tar.xz

    glib-2.63.3源码包,需要的可以下载编译,可以使用。...glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性。glib是Gtk +库和Gnome的基础。glib可以在多个平台下使用,比如Linux、Unix、Windows等

    ARM学习8对于画线函数Glib_Line算法的研究.pdf

    ARM学习8对于画线函数Glib_Line算法的研究.pdf

    glib2-devel

    这个是glib2-devel,它和glib.2..不一样。 我是在编译heartbeat时,遇到缺少glib2-devel包的时候,下载的。 包含64位系统的和32位系统的

Global site tag (gtag.js) - Google Analytics