12. 数据结构hashtable
容器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相关推荐
- js实现存储对象的数据结构hashTable和list
AxeSlide软件项目梳理 canvas绘图系列知识点整理 以下代码是typescript语言来写的,其实和es6面向对象的写法基本一致.大家阅读后都明白这些方法的作用. hash hash结构 ...
- Java数据结构--HashTable(拉链法)
双向节点 /*** Created by root on 16-3-6.*/ public class Node<E> {public E data;public Node prev;pu ...
- 数据结构--hashtable(散列表)
散列 散列又叫hash.是通过关键字把数据映射到指定位置的一种数据结构.理想的散列表,是一个包含关键字的固定大小的数组 哈希表存储的是键值对,其查找的时间复杂度与元素数量多少无关,哈希表在查找元素时是 ...
- Java 集合系列12之 Hashtable详细介绍(源码解析)和使用示例
转载 http://www.cnblogs.com/skywang12345/p/3310887.html 转载于:https://www.cnblogs.com/lizhouwei/p/916901 ...
- 天耀18期 –12.数据结构 ArrayList【作业】-计算机管理
/** * 1. 使用ArrayList存储整型元素,并对元素进行升序输出 */ import java.util.ArrayList; import java.util.Iterator; impo ...
- 天耀18期 - 12.数据结构-1-2.LinkedList【作业】-猜数字.doc
/** * 1. 随机生成4个0到9的整数,组成一个序列(使用LinkedList<Integer>存储) 例如:3 6 4 4 2. 然后要求用户循环猜这4个数子,在用户每猜一次之 ...
- 吊打java面试官之 Hashtable详细介绍(源码解析)和使用示例
概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习. 我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable. 第1部分 ...
- .Net 中HashTable,HashMap 和 Dictionarykey,value 和ListT和DataTable的比较
转载自http://www.cnblogs.com/jilodream/p/4219840.html (一)HashTable 和Dic 数据结构 Hashtable和Dictionary ...
- Java 集合系列11: Hashtable深入解析(1)
戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 QQ群:766946816 概要 前一章,我们学习了HashMap.这一 ...
最新文章
- 500行代码写一个俄罗斯方块游戏
- 2010.4.18 OA 项目组一周工作报告
- Java设计模式(十九):解释器设计模式
- Docker最全教程——Redis容器化以及排行榜实战(十三)
- 这里有一份面筋请查收(二)
- gitee项目404问题_七款开源项目,让你数据库管理不再成为一个问题
- c语言练习书,谁有C语言入门的练习题?
- 当神经网络遇上量子计算:谷歌证明量子神经网络可训练图像分类
- 在 ML2 中配置 VXLAN - 每天5分钟玩转 OpenStack(110)
- 按键精灵注册服务器,按键精灵网页注册脚本教程
- 阿里巴巴Java开发手册详细版本
- 服务器lsass状态代码c0000005,lsass.exe是什么进程?Win7系统提示Lsass.exe系统错误的原因及解决方法...
- pta——特立独行的幸福
- c语言修改pdf文件内容,PDF如何编辑,PDF文件怎么修改文字
- 【Python数据分析学习实例】计算某个函数的一阶导数、二阶导数,并绘出图像
- 多项式的余数定理及其应用
- Snowflake生成的ID是全局递增唯一么?怎么实现全局递增的唯一ID?
- Silicon Labs EFR32 RF射频测试-RAILTEST
- 股票交易日(动态规划)
- SpringBoot2.x集成mongoDB4.0实现音频文件的上传下载功能