容器hashtable

  • 散列表

associated container.

  • 空间足够时,一对一映射
  • 实际上不会有这么大的空间。空间不足时,可能会发生两个或者多个不同的元素映射到一个槽bucket中。
    • 如何解决哈希冲突?

      • 一次函数转移到下一个位置
      • 二次函数转移到下一个位置
    • 次数越高,插入,查找的效率越低。
    • 工业界上使用的是开放地址法

Separate Channing

  • 使用链表来处理哈希碰撞的情况
  • 当链表中的元素很多时,搜索的效率降低,这时需要将链表打散. rehashing
    • 增加bucket的数量,重新哈希,根据经验法则:buckets 个数是素数,每次扩容大概两倍
    • 扩容后所有的元素重新排列。分摊时间O(1)。
  • 可以使用hashtable 的 iterator来改变元素的data. 但是不能改变元素的key,因为hashtable 根据key来实现严谨的元素排列。

gunc 源码

  • 模版参数: 6 个

    • value
    • key
    • HashFcn 哈希函数,key如何映射到hashcode
    • ExtractKey, 类型萃取:如何从一包东西中提取key
    • EqualKey,key的比较规则
    • Alloc 分配器,有默认参数
  • size 是多少 20
    • 3 个函数对象 3 bytes
    • 一个vector of node * 12 bytes
    • 一个size_t 元素的数量 4 bytes
  • 迭代器
    • 当前节点 cur
    • 走到边界之后 回到 hashtable ,进入下一个bucket

application

  • 元素类型是cstyle字符串 value 和key是一个玩意
  • 使用algorithm 提供的hash函数
  • 使用identity 萃取元素类型
  • eqstr 如何判断相等 strcmp 比较字符串的内容
  • 分配器使用默认的分配器

hash 函数模版

  • 模版的偏特化版本
  • 指定的参数类型,模版特化-> 仿函数

  • 对于数来说,hash函数将其本身作为编号
  • 对于字符串来说如何获得hashcode __stl_hash_string (const char * s); 保证尽量不重复即可,需要数学工具进行分析,越杂乱,出现哈希碰撞的概率越低。

modulus 运算

hashset, hash_multiset, hash_map, hash_multimap

  • 底层由hash table 支持

  • rehashing buckets 数量大于 元素数量

  • 元素个数是32768
  • buckets个数是62233 (gnuc 4.9)

12. 数据结构hashtable相关推荐

  1. js实现存储对象的数据结构hashTable和list

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 以下代码是typescript语言来写的,其实和es6面向对象的写法基本一致.大家阅读后都明白这些方法的作用. hash hash结构 ...

  2. Java数据结构--HashTable(拉链法)

    双向节点 /*** Created by root on 16-3-6.*/ public class Node<E> {public E data;public Node prev;pu ...

  3. 数据结构--hashtable(散列表)

    散列 散列又叫hash.是通过关键字把数据映射到指定位置的一种数据结构.理想的散列表,是一个包含关键字的固定大小的数组 哈希表存储的是键值对,其查找的时间复杂度与元素数量多少无关,哈希表在查找元素时是 ...

  4. Java 集合系列12之 Hashtable详细介绍(源码解析)和使用示例

    转载 http://www.cnblogs.com/skywang12345/p/3310887.html 转载于:https://www.cnblogs.com/lizhouwei/p/916901 ...

  5. 天耀18期 –12.数据结构 ArrayList【作业】-计算机管理

    /** * 1. 使用ArrayList存储整型元素,并对元素进行升序输出 */ import java.util.ArrayList; import java.util.Iterator; impo ...

  6. 天耀18期 - 12.数据结构-1-2.LinkedList【作业】-猜数字.doc

    /** * 1. 随机生成4个0到9的整数,组成一个序列(使用LinkedList<Integer>存储) 例如:3  6  4  4 2. 然后要求用户循环猜这4个数子,在用户每猜一次之 ...

  7. 吊打java面试官之 Hashtable详细介绍(源码解析)和使用示例

    概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习. 我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable. 第1部分 ...

  8. .Net 中HashTable,HashMap 和 Dictionarykey,value 和ListT和DataTable的比较

    转载自http://www.cnblogs.com/jilodream/p/4219840.html (一)HashTable    和Dic    数据结构 Hashtable和Dictionary ...

  9. Java 集合系列11: Hashtable深入解析(1)

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 QQ群:766946816 概要 前一章,我们学习了HashMap.这一 ...

最新文章

  1. 500行代码写一个俄罗斯方块游戏
  2. 2010.4.18 OA 项目组一周工作报告
  3. Java设计模式(十九):解释器设计模式
  4. Docker最全教程——Redis容器化以及排行榜实战(十三)
  5. 这里有一份面筋请查收(二)
  6. gitee项目404问题_七款开源项目,让你数据库管理不再成为一个问题
  7. c语言练习书,谁有C语言入门的练习题?
  8. 当神经网络遇上量子计算:谷歌证明量子神经网络可训练图像分类
  9. 在 ML2 中配置 VXLAN - 每天5分钟玩转 OpenStack(110)
  10. 按键精灵注册服务器,按键精灵网页注册脚本教程
  11. 阿里巴巴Java开发手册详细版本
  12. 服务器lsass状态代码c0000005,lsass.exe是什么进程?Win7系统提示Lsass.exe系统错误的原因及解决方法...
  13. pta——特立独行的幸福
  14. c语言修改pdf文件内容,PDF如何编辑,PDF文件怎么修改文字
  15. 【Python数据分析学习实例】计算某个函数的一阶导数、二阶导数,并绘出图像
  16. 多项式的余数定理及其应用
  17. Snowflake生成的ID是全局递增唯一么?怎么实现全局递增的唯一ID?
  18. Silicon Labs EFR32 RF射频测试-RAILTEST
  19. 股票交易日(动态规划)
  20. SpringBoot2.x集成mongoDB4.0实现音频文件的上传下载功能

热门文章

  1. 高校毕业生登记表计算机水平,高校毕业生登记表
  2. 用ps提取彩色图像的线稿
  3. 工银亚洲见证开户详细过程和攻略
  4. C# zxing条形码开源库的简单使用例子
  5. domino服务器库文件,Domino 服务器设置程序 涉及的文件
  6. 深入浅出系列之——并查集详解【武侠版】【简单有趣】
  7. MongoDB一篇从入门到实战
  8. 关于游戏中的数据分析
  9. 计应121--实训四【李智飞(27号)--李阳持(26号)--胡俊琛(13号)--曹吉(2号)】
  10. 数据扁平化与反扁平化