当前位置: 首页 > news >正文

[ C++ ] | unordered_map 底层实现原理

目录

unordered_map

解决哈希冲突的方式

STL中哈希表是什么样的?

unordered_map是怎么封装哈希表的


unordered_map

unordered_map, 是基于散列表(哈希表), 将KV对, 通过对K进行hash运算, 映射到hash表的具体位置.

将多个Key映射到hash表中的同一个位置的行为, 叫做哈希碰撞.

解决哈希冲突的方式

线性探查, 开放寻址, 拉链法等, C++STL, Redis, 中使用的是拉链法, 所以这个主要说说拉链法. 

拉链法就是多个Key映射到同一个位置的时候, 将多个元素使用链表头插的方式插入进去.

1).

2).

我们使用负载因子来表示哈希碰撞的激烈程度, (实际存储的元素个数 / 散列表中桶的个数), 当负载因子大于1的时候, 触发rehash, 散列表扩容, 将原来映射的KV对, 重新映射到扩容后的散列表上. 

rehash的时候, 会对通过hash函数之后值缓存起来, 再对新散列表的大小取余 ... 

STL中哈希表是什么样的?

 

用一个_M_before_begin, 让所有的存储数据的节点都链在这个节点之后

每一个数组槽位, 每一个桶, 都指向该层节点的上一个节点

在插入的时候, 提供的是 index, Value, Value包括key和value, 判断桶子里面是否有元素, 有元素的话: 头插到上一个节点之后. 没有元素的话: 头插到_before_begin之后, 修改曾经指向_before_begin节点的桶子的指向

 

 

unordered_map是怎么封装哈希表的

http://www.dtcms.com/a/263323.html

相关文章:

  • Linux-进程概念(1)
  • 亚马逊,塔吉特采购,测评防砍单封号的养号下单黄金法则
  • 华为云Flexus+DeepSeek征文 | Word办公软件接入华为云ModelArts Studio大模型,实现AI智能办公
  • 【C++指南】C++ list容器完全解读(三):list迭代器的实现与优化
  • Deploy StarRocks with Docker
  • ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
  • Deepoc 大模型在无人机行业应用效果的方法
  • Python函数参数实例练习--输出信息
  • 抗量子域名系统:全面的系统级研究
  • 前端领域的技术热点与深度解析
  • 对selenium进行浏览器和驱动进行配置Windows | Linux
  • [面试]手写题-Promise.all() Promise.race()
  • 博图SCL编程:结构体(STRUCT)使用详解与实战案例
  • HTML<span>元素详解
  • 安装bcolz包报错Cython.Compiler.Errors.CompileError: bcolz/carray_ext.pyx的解决方法
  • 条件运算符和逗号运算
  • Intel Fortran Compiler (ifx) 详细使用指南:新一代 Fortran 编译器在流体动力学模拟中的应用
  • 51单片机CPU工作原理解析
  • python环境快速搭建
  • 深入比较 Gin 与 Beego:Go Web 框架的两大选择
  • Spring Boot 统一功能处理:拦截器详解
  • 机器视觉检测系统的影响因素解析
  • Prompt 精通之路(七)- 你的终极 AI 宝典:Prompt 精通之路系列汇总
  • 《Building REST APIs with Flask》读后感
  • 打造现代Web应用的高效解决方案:Full Stack FastAPI模板
  • JVM 垃圾回收(GC)笔记
  • Nestjs框架: Nestjs 复杂企业应用场景架构设计分析
  • WPF中依赖属性和附加属性
  • API接口安全-2:签名、时间戳与Token如何联手抵御攻击
  • 时序数据集---UWave