news 2026/5/1 10:11:43

【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/5/1 9:55:45

Examor:打造个性化AI学习助手的终极指南

Examor&#xff1a;打造个性化AI学习助手的终极指南 【免费下载链接】examor For students, scholars, interviewees and lifelong learners. Let LLMs assist you in learning &#x1f393; 项目地址: https://gitcode.com/gh_mirrors/ex/examor Examor是一款革命性的…

作者头像 李华
网站建设 2026/5/1 8:36:36

网络安全专业的就业前景

网络安全专业就业前景怎么样&#xff1f; 网络的安全是指通过采用各种技术和管理措施&#xff0c;使网络系统正常运行&#xff0c;从而确保网络数据的可用性、完整性和保密性。网络安全的具体含义会随着“角度”的变化而变化。比如&#xff1a;从用户&#xff08;个人、企业等&…

作者头像 李华
网站建设 2026/4/30 18:33:41

WLED终极指南:ESP32智能灯光控制全解析

WLED终极指南&#xff1a;ESP32智能灯光控制全解析 【免费下载链接】WLED Control WS2812B and many more types of digital RGB LEDs with an ESP8266 or ESP32 over WiFi! 项目地址: https://gitcode.com/gh_mirrors/wl/WLED WLED项目是一个专为ESP8266和ESP32微控制器…

作者头像 李华
网站建设 2026/5/1 8:02:14

5步掌握SkyReels-V2视频生成框架的完整配置流程

5步掌握SkyReels-V2视频生成框架的完整配置流程 【免费下载链接】SkyReels-V2 SkyReels-V2: Infinite-length Film Generative model 项目地址: https://gitcode.com/GitHub_Trending/sk/SkyReels-V2 还在为无限长度视频生成模型的高门槛而苦恼吗&#xff1f;面对复杂的…

作者头像 李华
网站建设 2026/5/1 7:56:08

10、NCurses 窗口与面板操作指南

NCurses 窗口与面板操作指南 1. 窗口复制 在 NCurses 中, dupwin() 函数可用于复制整个窗口,包括其大小、文本等所有内容,创建一个新的复制窗口。它本质上类似于 newwin() 函数,但使用现有窗口作为模板来创建新窗口。 1.1 函数原型 newwin = dupwin(win);该函数返回…

作者头像 李华
网站建设 2026/5/1 0:43:29

12、NCurses 鼠标交互与其他实用功能全解析

NCurses 鼠标交互与其他实用功能全解析 1. NCurses 与鼠标交互概述 NCurses 具备与连接到计算机的鼠标或类似指向设备进行交互的能力。如同在图形程序中使用鼠标一样,我们可以在程序里读取并运用鼠标信息。不过,这并非强制要求,毕竟 NCurses 是基于文本的,而鼠标通常与图…

作者头像 李华