【C++】STL之哈希的应用

哈希的应用

  • STL中的unordered系列
    • unordered_map
  • 位图
  • 布隆过滤器
  • 海量数据面试题

STL中的unordered系列

c++11中提出的unordered系列,其底层结构都是用哈希桶实现的。

unordered_map

构造

函数申明 功能介绍
可以使用迭代器构造,也可以使用拷贝构造,或者是初始化列表进行构造

容量

函数声明 功能介绍
bool empty() const 检测unordered_map是否为空
size_t size() const 获取unordered_map的有效元素个数

迭代器

函数声明 功能介绍
begin() 返回unordered_map第一个元素的迭代器
end() 返回unordered_map最后一个元素的下一个位置的迭代器
cbegin() 返回unordered_map第一个元素的const迭代器
cend() 返回unordered_map最后一个元素的下一个位置的const迭代器

元素访问

函数声明 功能介绍
operator[] 返回与key对应的value,没有的话则插入失败

注意:该函数中实际调用哈希桶的插入操作,用参数key与V()构造一个默认值往底层哈希桶中插入,如果key不在哈希桶中,插入成功,返回V(),插入失败,说明key已经在哈希桶中,将key对应的value返回。

查询

函数声明 功能介绍
iterator find(const K& key) 返回的是迭代器,返回key在哈希桶中的位置
size_t count(const K& key) 返回的是key在哈希桶中的个数

修改

函数声明 功能介绍
insert 向容器中插入键值对
erase 删除容器中的键值对
void clear() 清空容器中有效元素
void swap(unordered_map&) 交换两个容器中的元素

桶的操作

函数声明 功能介绍
size_t bucket_count()const 返回哈希桶中桶的个数
size_t bucket_size(size_t n)const 返回n号桶中有效元素的个数

位图

位图就是用每一个比特位来存放某种状态,使用于海量数据,和数据无重复的场景。通常用来判断某个数据是否存在的。
位图的应用:
1.快速查找某个数据是否在一个集合中
2.排序+去重
3.求两个数据的交集、并集
4.操作系统中磁盘块的标记

面试题:
1.给定100亿个整数,设计算法找到只出现一次的整数?
2.给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?
3.位图应用变形:1个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数

布隆过滤器

海量数据面试题

你可能感兴趣的:(C++,数据结构,哈希算法,c++,算法)