C++_STL——unordered_map、unordered_multimap、unordered_set、unordered_multiset

参考:cplusplus

这几种都是拉链法所写的,所以放在一起他们有很多相似之处,以下只记录之前没遇到过的成员函数

遇到不清楚的可以看C++_STL——map、multimap

1、std::unordered_map::bucket

size_type bucket ( const key_type& k ) const;

1.1功能

返回键值k所在的桶号,即可以理解为拉链法的数组下标,桶是容器内部哈希表中的一个槽,元素根据其键的哈希值分配到该槽。 桶的编号从 0 到 (bucket_count-1)。可以通过 unordered_map::begin 和 unordered_map::end 返回的范围迭代器访问存储桶中的各个元素。

1.2参数

K: key

1.3返回值

返回键值k所在的桶号

// unordered_map::bucket
#include <iostream>
#include <string>
#include <unordered_map>int main ()
{std::unordered_map<std::string,std::string> mymap = {{"us","United States"},{"uk","United Kingdom"},{"fr","France"},{"de","Germany"}};for (auto& x: mymap) {std::cout << "Element [" << x.first << ":" << x.second << "]";std::cout << " is in bucket #" << mymap.bucket (x.first) << std::endl;}return 0;
}

2、std::unordered_map::bucket_count

size_type bucket_count() const noexcept;

2.1功能

返回有多少个桶, 桶的数量直接影响容器哈希表的负载因子(从而影响冲突的概率)。 为了将负载因子保持在特定阈值(其 max_load_factor)以下,容器会自动增加桶的数量、每次需要增加桶的数量时都会导致重新哈希。

负载因子

load_factor=size/bucket_countload\_factor= size / bucket\_count load_factor=size/bucket_count

2.2返回值

桶的数量

// unordered_map::bucket_count
#include <iostream>
#include <string>
#include <unordered_map>int main ()
{std::unordered_map<std::string,std::string> mymap = {{"house","maison"},{"apple","pomme"},{"tree","arbre"},{"book","livre"},{"door","porte"},{"grapefruit","pamplemousse"}};unsigned n = mymap.bucket_count();std::cout << "mymap has " << n << " buckets.\n";for (unsigned i=0; i<n; ++i) {std::cout << "bucket #" << i << " contains: ";for (auto it = mymap.begin(i); it!=mymap.end(i); ++it)std::cout << "[" << it->first << ":" << it->second << "] ";std::cout << "\n";}return 0;
}

3、std::unordered_map::bucket_size

size_type bucket_size ( size_type n ) const;

3.1功能

返回存储桶 n 中的元素数。

3.2返回值

桶 n 中的元素数。

// unordered_map::bucket_size
#include <iostream>
#include <string>
#include <unordered_map>int main ()
{std::unordered_map<std::string,std::string> mymap = {{"us","United States"},{"uk","United Kingdom"},{"fr","France"},{"de","Germany"}};unsigned nbuckets = mymap.bucket_count();std::cout << "mymap has " << nbuckets << " buckets:\n";for (unsigned i=0; i<nbuckets; ++i) {std::cout << "bucket #" << i << " has " << mymap.bucket_size(i) << " elements.\n";}return 0;
}

4、std::unordered_map::hash_function

hasher hash_function() const;

4.1功能

获取unordered_map的哈希函数对象

哈希函数是一个一元函数,它接受一个 key_type 类型的对象作为参数,并基于它返回一个 size_t 类型的唯一值。 它在构造时被容器采用(有关更多信息,请参阅 unordered_map 的构造函数)。 默认情况下,它是对应键类型的默认散列函数:hash<key_type>。

// unordered_map::hash_function
#include <iostream>
#include <string>
#include <unordered_map>typedef std::unordered_map<std::string,std::string> stringmap;int main ()
{stringmap mymap;stringmap::hasher fn = mymap.hash_function();std::cout << "this: " << fn ("this") << std::endl;std::cout << "thin: " << fn ("thin") << std::endl;return 0;
}

5、std::unordered_map::load_factor、max_bucket_count、max_load_factor

float load_factor() const noexcept;
size_type max_bucket_count() const noexcept;
//get (1)    获取
float max_load_factor() const noexcept;
//set (2)   设置
void max_load_factor ( float z );

5.1功能

load_factor:返回 unordered_map 容器中的当前负载因子。

max_bucket_count: 返回 unordered_map 容器可以拥有的最大桶数。

max_load_factor: get: 返回 unordered_map 容器的当前最大负载因子。set : 将 z 设置为 unordered_map 容器的新最大负载因子。默认情况下,unordered_map 容器的 max_load_factor 为 1.0。

// unordered_map hash table stats
#include <iostream>
#include <unordered_map>int main ()
{std::unordered_map<int,int> mymap;std::cout << "size = " << mymap.size() << std::endl;std::cout << "bucket_count = " << mymap.bucket_count() << std::endl;std::cout << "load_factor = " << mymap.load_factor() << std::endl;std::cout << "max_load_factor = " << mymap.max_load_factor() << std::endl;return 0;
}

6、std::unordered_map::rehash、reserve

void reserve ( size_type n );
void rehash( size_type n );

6.1功能

reserve:设置每个桶最少含有的元素数

rehash: 将容器中的桶数设置为 n 或更多。

// unordered_map::reserve
#include <iostream>
#include <string>
#include <unordered_map>int main ()
{std::unordered_map<std::string,std::string> mymap;mymap.reserve(6);mymap["house"] = "maison";mymap["apple"] = "pomme";mymap["tree"] = "arbre";mymap["book"] = "livre";mymap["door"] = "porte";mymap["grapefruit"] = "pamplemousse";for (auto& x: mymap) {std::cout << x.first << ": " << x.second << std::endl;}return 0;
}
// unordered_map::rehash
#include <iostream>
#include <string>
#include <unordered_map>int main ()
{std::unordered_map<std::string,std::string> mymap;mymap.rehash(20);mymap["house"] = "maison";mymap["apple"] = "pomme";mymap["tree"] = "arbre";mymap["book"] = "livre";mymap["door"] = "porte";mymap["grapefruit"] = "pamplemousse";std::cout << "current bucket_count: " << mymap.bucket_count() << std::endl;return 0;
}

无序可重复哈希表unordered_multimap

这里主要讲讲和unordered_map的区别部分

1、key不重复,value可重复

2、无[]直接访问元素、无at()

其余的就都和unordered_map类似了,只有些许不同,具体细节unordered_multimap)

无续集unordered_set

这里主要讲讲和map的区别部分

1、key和value是同一个,或者说只有key,且不可重复,且为常量

2、无[]直接访问元素、无at()

其余的就都和unordered_map类似了,只有些许不同,具体细节unordered_set

可重复无续集unordered_multiset

1、key和value是同一个,或者说只有key,且可重复,且为常量

2、无[]直接访问元素、无at()

其余的就都和unordered_map类似了,只有些许不同,具体细节unordered_multiset

C++_STL——unordered_map、unordered_multimap、unordered_set、unordered_multiset相关推荐

  1. C++ STL(八) -------- unordered_set、unordered_map的介绍+使用+比较

    1.unordered系列关联式容器 在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时的效率可达到O(logN),即最差情况下需要比较红黑树的高度次,当树中的结点非常多时,查询 ...

  2. c++中map、multimap、unordered_map、unordered_multimap的区别

    前言: c++的各种容器使用的时候很方便,但是如果作为一个初学者,看到一堆库要记住也是很头疼的,而且很多库名称会很相似,所以我们要很好的使用这些库的时候,我们需要了解清楚它们底层实现的原理,这样我们使 ...

  3. 如何在Dev-Cpp中使用C++11中的函数:stoi、to_string、unordered_map、unordered_set、auto

    如果想要在Dev-Cpp里面使用C++11特性的函数,比如刷算法中常用的stoi.to_string.unordered_map.unordered_set.auto这些,需要在设置里面让dev支持c ...

  4. 高级数据结构与算法 | 哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶

    文章目录 哈希 哈希函数 常见的哈希函数 字符串哈希函数 哈希冲突 闭散列的解决方法 开散列的解决方法 负载因子以及增容 对于闭散列 对于开散列结构 具体实现 哈希表(闭散列) 插入 查找 删除 完整 ...

  5. [每日一题] 128. 青蛙过河(数组、记忆化搜索、递归、剪枝)

    文章目录 1. 题目来源 2. 题目说明 3. 题目解析 方法一:哈希表.记忆化搜索.递归解法 方法二:迭代解法 方法三:回溯法+贪心策略+剪枝 1. 题目来源 链接:青蛙过河 来源:LeetCode ...

  6. 哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶

    文章目录 哈希 哈希(散列)函数 常见的哈希函数 字符串哈希函数 哈希冲突 闭散列(开放地址法) 开散列(链地址法/拉链法) 负载因子以及增容 对于闭散列 对于开散列结构 具体实现 哈希表(闭散列) ...

  7. PAT甲级1141 PAT Ranking of Institutions :[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数、排名

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:和下面这题是一道题: PAT甲级1137 Final Grading:[C++题解]结构体.排序.哈希表.结构体构造函数.结构体内写函 ...

  8. 代码随想录算法训练营第30天| 332.重新安排行程 、51. N皇后 、 37. 解数独

    代码随想录算法训练营第30天| 332.重新安排行程 .51. N皇后 . 37. 解数独 332.重新安排行程 开始想的是将行程进行全排列之后,然后选出一个字典排序最小的.就也是使用的回溯的思路. ...

  9. 代码随想录【Day 30】| 332.重新安排行程 、51. N皇后 、37. 解数独

    代码随想录[Day 30] | 332.重新安排行程 .51. N皇后 .37. 解数独 332.重新安排行程 题目链接:332.重新安排行程 卡尔文解 解题思路及注意事项: 代码实现: 51. N皇 ...

最新文章

  1. 公开羞辱邻座大码乘客 美国一女乘客被逐下客机
  2. 以太币(Ether)的单位
  3. hyperopt中文文档:Scipy2013
  4. Spring Boot文档地址
  5. 20210620 Successive projection algorithm(连续投影法)
  6. 获取input内容并回填_超详细的软件测试内容实战
  7. mcse 2000 认证介绍
  8. Hadoop入门(十一)Mapreduce的InputFomrat各种子类
  9. Java秒杀系统实战系列~RabbitMQ死信队列处理超时未支付的订单(转)
  10. CF 961E Tufurama
  11. Mac OS X 安装和配置ngrok
  12. mongodb和mysql创建表_MongoDB 数据库创建删除、表(集合)
  13. 医学图像分割--U-Net: Convolutional Networks for Biomedical Image Segmentation
  14. php织梦cms 安装教程,Linux服务器上安装织梦CMS,linux服务器织梦cms_PHP教程
  15. 需要rhce(redhat认证)证书的联系warehouse。无需自己考,直接拿证。
  16. 企查查某 2022/7/13 随机请求头JS逆向:★★
  17. Unity3d小球碰到墙壁之后反弹
  18. CRTD--有关于intel芯片组和BCM4360网卡适配银河麒麟V10系统(适用于macbook)
  19. 寻找数组中第k大的数
  20. 深度强化学习:从像素玩Pong!

热门文章

  1. Microbiome:所谓的“富集培养”获得的微生物真的都是被“富集”出来的吗?
  2. 一个课题组两篇Cell发布病毒与宿主相互作用重要研究
  3. R语言应用str_match函数和str_match_all函数从字符串抽取匹配的字符串模式:str_match函数抽取第一个匹配的字符串模式、str_match_all函数抽取多个匹配的字符串模式
  4. R语言数据格式转换函数、数据类型判断函数(numeric、character、vector、matrix、data.frame、factor、logical)、R语言数据格式类型转换
  5. R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot)、gganimate包创建动态条形图(bar plot)动画、基于transition_time函数
  6. Python偏相关(Partial Correlation)或者部分相关性系数计算实战:偏相关性(Partial Correlation)计算及结果解读
  7. R语言基于forestplot包可视化森林图实战详解:美化的森林图:自定义字体设置、置信区间、坐标轴(刻度、标签、范围)、无效线去除、水平线、辅助线、box形状、色彩等
  8. Keras训练神经网络进行分类并进行交叉验证(Cross Validation)
  9. GSVA包进行基因集变异分析
  10. oracle 存储过程= 1,oracle 存储过程1