news 2026/3/6 1:52:58

【C++】无序容器unordered_set和unordered_map的使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C++】无序容器unordered_set和unordered_map的使用

1. unordered_set系列的使用

1.1 unordered_set和unordered_multiset参考文档

https://legacy.cplusplus.com/reference/unordered_set/

1.2 unordered_set类的介绍

unordered_set底层是哈希表,而set底层是红黑树

1.3 unordered_set和set的使用差异

void test_set2() { const size_t N = 1000000; unordered_set<int> us; set<int> s; vector<int> v; v.reserve(N); srand(time(0)); for (size_t i = 0; i < N; ++i) { //v.push_back(rand()); // N比较大时,重复值比较多 v.push_back(rand() + i); // 重复值相对少 //sv.push_back(i); // 没有重复,有序 } size_t begin1 = clock(); for (auto e : v) { s.insert(e); } size_t end1 = clock(); cout << "set insert:" << end1 - begin1 << endl; size_t begin2 = clock(); us.reserve(N); for (auto e : v) { us.insert(e); } size_t end2 = clock(); cout << "unordered_set insert:" << end2 - begin2 << endl; int m1 = 0; size_t begin3 = clock(); for (auto e : v) { auto ret = s.find(e); if (ret != s.end()) { ++m1; } } size_t end3 = clock(); cout << "set find:" << end3 - begin3 << "->" << m1 << endl; int m2 = 0; size_t begin4 = clock(); for (auto e : v) { auto ret = us.find(e); if (ret != us.end()) { ++m2; } } size_t end4 = clock(); cout << "unorered_set find:" << end4 - begin4 << "->" << m2 << endl; cout << "插入数据个数:" << s.size() << endl; cout << "插入数据个数:" << us.size() << endl << endl; size_t begin5 = clock(); for (auto e : v) { s.erase(e); } size_t end5 = clock(); cout << "set erase:" << end5 - begin5 << endl; size_t begin6 = clock(); for (auto e : v) { us.erase(e); } size_t end6 = clock(); cout << "unordered_set erase:" << end6 - begin6 << endl << endl; }

1.4 unordered_map和map的使用差异

1.5 unordered_multimap/unordered_multiset

  • unordered_multimap/unordered_multiset跟multimap/multiset功能完全类似,⽀持Key冗余。
  • unordered_multimap/unordered_multiset跟multimap/multiset的差异也是三个⽅面的差异,
    key的要求的差异,iterator及遍历顺序的差异,性能的差异。

1.6 unordered_xxx的哈希相关接口

Buckets和Hash policy系列的接⼝分别是跟哈希桶和负载因⼦相关的接口,⽇常使用的角度我们不需要太关注,后⾯学习了哈希表底层,我们再来看这个系列的接⼝,一目了然。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/5 2:19:32

SoFixer:Android SO文件修复与加固的终极指南

SoFixer&#xff1a;Android SO文件修复与加固的终极指南 【免费下载链接】SoFixer 项目地址: https://gitcode.com/gh_mirrors/so/SoFixer SoFixer是一款专为Android开发者设计的强大工具&#xff0c;主要用于修复和加固SO文件&#xff0c;解决各种ELF格式相关的兼容性…

作者头像 李华
网站建设 2026/3/5 3:34:30

PhyloSuite:生物信息学研究的终极进化分析工具指南

PhyloSuite&#xff1a;生物信息学研究的终极进化分析工具指南 【免费下载链接】PhyloSuite PhyloSuite is an integrated and scalable desktop platform for streamlined molecular sequence data management and evolutionary phylogenetics studies 项目地址: https://gi…

作者头像 李华
网站建设 2026/3/5 3:57:46

流星雨相位解包法:用 MATLAB 实现的快速解包算法

流星雨相位解包法:用matlab编写的“流星雨相位解包法”&#xff0c;可直接移植到任何matlab程序里使用。 这种相位解包法的特点是:解包轨迹如同流星雨一般从一点向四面八方展开&#xff0c;不但速度快&#xff0c;而且由于是向四面八方展开解包&#xff0c;展开过程多个解包轨迹…

作者头像 李华
网站建设 2026/3/5 4:09:08

如何提升工厂内网培训系统的使用效率?

提升工厂内网培训系统的使用效率&#xff0c;关键在于系统的全面性与灵活性。通过对各部门需求进行分析&#xff0c;企业能够根据员工的技能水平和培训目标&#xff0c;制定切实可行的内容模块。此外&#xff0c;优化课程内容、提供丰富多样的学习材料&#xff0c;例如在线课程…

作者头像 李华
网站建设 2026/3/5 2:40:27

毕设分享 深度学习图像风格迁移系统(源码分享)

文章目录 0 简介1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示最后 0 简介 今天学长向大家分享一个毕业设计项目 毕业设计 深度学习图像风格迁移系统(源码分享) 项目运行效果&#xff1a; 毕业设计 深度学习图像风格迁移系统&#x1f9ff; …

作者头像 李华
网站建设 2026/3/5 4:08:10

“禾廪纪”莓茶问鼎国际金奖 湖南湘茶闪耀鹏城颁奖盛典

聚光灯聚焦之下&#xff0c;湖南湘见生态农业有限公司选送的“禾廪纪”莓茶金色奖杯被高高擎起&#xff0c;台下各地茶商与观众纷纷举起手机&#xff0c;定格下张家界生态茶产业迈向世界的高光时刻。2025年12月11日下午&#xff0c;深圳会展中心9号馆内气氛热烈非凡&#xff0c…

作者头像 李华