C++ 哈希

目录

1. unordered系列关联式容器

1.1 unordered_map

1.1.1 unordered_map的文档介绍

1.1.2 unordered_map的接口说明

1.2 unordered_set

1.3 例题

2. 底层结构

2.1 哈希概念  

2.2 哈希冲突

2.3 哈希函数

2.4 哈希冲突解决

2.4.1 闭散列

2.4.2 开散列

3. 模拟实现

3.1 哈希表的改造

1. 模板参数列表的改造

2. 增加迭代器操作

3. 增加通过key获取value操作

3.2 unordered_map

4. 哈希的应用

4.1 位图

4.1.1 位图概念

 4.1.2 位图的实现

4.1.3 位图的应用

4.2 布隆过滤器 

4.2.1 布隆过滤器提出

4.2.2布隆过滤器概念  

 4.2.3 布隆过滤器的插入

4.2.4 布隆过滤器的查找

 4.2.5 布隆过滤器删除

4.2.6 布隆过滤器优点 

4.2.7 布隆过滤器缺陷 

5. 海量数据面试题 

5.1 哈希切割

5.2 位图应用

5.3 布隆过滤器


1. unordered系列关联式容器

C++98 中, STL 提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 $log_2N$,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11 中, STL 又提供了 4 个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对unordered_map unordered_set 进行介绍,unordered_multimap和 unordered_multiset 可查看文档介绍

1.1 unordered_map

1.1.1 unordered_map的文档介绍

1. unordered_map 是存储 <key, value> 键值对的关联式容器,其允许通过 keys 快速的索引到与其对应的value
2. unordered_map 中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此
键关联。键和映射值的类型可能不同。
3. 在内部 ,unordered_map 没有对 <kye, value> 按照任何特定的顺序排序 , 为了能在常数范围内找到key 所对应的 value unordered_map 将相同哈希值的键值对放在相同的桶中。
4. unordered_map 容器通过 key 访问单个元素要比 map 快,但它通常在遍历元素子集的范围迭代方面效率较低。
5. unordered_maps 实现了直接访问操作符 (operator[]) ,它允许使用 key 作为参数直接访问
value
6. 它的迭代器至少是前向迭代器。

1.1.2 unordered_map的接口说明

1. unordered_map 的构造
函数声明 功能
unordered_map::unordered_map - C++ Reference
构造不同格式的 unordered_map 对象
2. unordered_map 的容量
函数声明 功能
bool empty() const
检测 unordered_map 是否为空
size_t size() const
获取 unordered_map 的有效元素个数
3. unordered_map 的迭代器
函数声明 功能
unordered_map::begin - C++ Reference
返回 unordered_map 第一个元素的迭代器
unordered_map::end - C++ Reference
返回 unordered_map 最后一个元素下一个位置的迭代器
unordered_map::cbegin - C++ Reference
返回 unordered_map 第一个元素的 const 迭代器
unordered_map::cend - C++ Reference
返回 unordered_map 最后一个元素下一个位置的 const 迭代器
4. unordered_map 的元素访问
函数声明 功能
https://cplusplus.com/reference/unordered_map/unordered_map/operator[]/
返回与 key 对应的 value ,没有一个默认值
注意:该函数中实际调用哈希桶的插入操作,用参数 key V() 构造一个默认值往底层哈希桶
中插入,如果 key 不在哈希桶中,插入成功,返回 V() ,插入失败,说明 key 已经在哈希桶中,
key 对应的 value 返回。
5. unordered_map 的查询
函数声明 功能
unordered_map::find - C++ Reference
返回 key 在哈希桶中的位置
unordered_map::count - C++ Reference
返回哈希桶中关键码为 key 的键值对的个数
注意: unordered_map key 是不能重复的,因此 count 函数的返回值最大为 1
6. unordered_map 的修改操作
函数声明 功能
unordered_map::insert - C++ Reference
向容器中插入键值对
unordered_map::erase - C++ Reference
删除容器中的键值对
unordered_map::clear - C++ Reference
清空容器中有效元素个数
unordered_map::swap - C++ Reference
交换两个容器中的元素

7. unordered_map 的桶操作
函数声明 功能
unordered_map::bucket_count - C++ Reference
返回哈希桶中桶的总个数
unordered_map::bucket_size - C++ Reference
返回 n 号桶中有效元素的总个数
unordered_map::bucket - C++ Reference
返回元素 key 所在的桶号

1.2 unordered_set

参见
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值