C++哈希

本文深入探讨了C++中的unordered_map容器,详细介绍了其内部结构、接口以及如何通过哈希函数实现快速访问。接着,文章讲解了哈希的概念、冲突解决方法,如闭散列和开散列。最后,文章讨论了哈希在位图和布隆过滤器中的应用,重点阐述了布隆过滤器的原理、优缺点及其在数据存储中的作用。
摘要由CSDN通过智能技术生成

1. unordered系列关联式容器

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对象
2. unordered_map的容量
函数声明
功能介绍
bool empty() const
检测unordered_map是否为空
size_t size() const
获取unordered_map的有效元素个数
3. unordered_map的迭代器
函数声明
功能介绍
begin
返回unordered_map第一个元素的迭代器
end
返回unordered_map最后一个元素下一个位置的迭代器
cbegin
返回unordered_map第一个元素的const迭代器
cend
返回unordered_map最后一个元素下一个位置的const迭代器
4. unordered_map的元素访问
函数声明
功能介绍
operator[]
返回与key对应的value,没有一个默认值
       注意:该函数中实际调用哈希桶的插入操作,用参数key与V()构造一个默认值往底层哈希桶
中插入,如果key不在哈希桶中,插入成功,返回V(),插入失败,说明key已经在哈希桶中,
将key对应的value返回。
5. unordered_map的查询
函数声明
功能介绍
iterator fifind(const K& key)
返回key在哈希桶中的位置
size_t count(const K& key)
返回哈希桶中关键码为key的键值对的个数
   注意:unordered_map中key是不能重复的,因此count函数的返回值最大为1
6. unordered_map的修改操作
函数声明
功能介绍
insert
向容器中插入键值对
erase
删除容器中的键值对
void clear()
清空容器中有效元素个数
void swap(unordered_map&)
交换两个容器中的元素
7. unordered_map的桶操作
函数声明
功能介绍
size_t bucket_count()const
返回哈希桶中桶的总个数
size_t bucket_size(size_t n)const
返回n号桶中有效元素的总个数
size_t bucket(const K& key)
返回元素key所在的桶号

1.2 在线OJ

1.重复n次的元素

class Solution {
public:
int repeatedNTimes(vector<int>& A) {
     size_t N = A.size()/2;
     // 用unordered_map统计每个元素出现的次数
     unordered_map<int, int> m;
     for(auto e : A)
         m[e]++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值