C++——unordered_map浅析

1. 简介

从 C++ 11 开始,hash_map 实现已被添加到标准库中,但为了防止与已有的代码存在冲突,决定使用替代名称 unordered_map。这个名字其实更具描述性,因为说明了该类元素的无序性。

  • unordered_map记录元素的hash值,根据hash值判断元素是否相同
  • map相当于java中的TreeMap,unordered_map相当于HashMap
  • 查找、插入效率:unordered_map的效率都优于hash_map,更优于map
  • 空间复杂度:hash_map最低,unordered_map次之,map最大。

与map的对比:

  • 存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的
  • map中的元素是按照二叉搜索树存储(用红黑树实现),进行中序遍历会得到有序遍历

与hash_map对比:

  • unordered_map原来属于boost分支和std::tr1中,而hash_map属于非标准容器。
  • unordered_map感觉速度和hash_map差不多,但是支持string做key,也可以使用复杂的对象作为key。
  • unordered_map编译时gxx需要添加编译选项:–std=c++11

2. unordered_map实现原理

使用:hashtable + bucket

内部采用 hashtable 的数据结构存储,所以,每个特定的 key 会通过一些特定的哈希运算映射到一个特定的位置,每个哈希桶中可能没有元素,也可能有多个元素。
在这里插入图片描述
插入过程:

  • 1、得到 key;
  • 2、通过 hash 函数得到 hash 值;
  • 3、得到桶号(一般都为 hash
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yawn__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值