news 2026/4/18 13:24:29

【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/4/17 14:55:45

Access 2010数据库引擎独立部署方案

Access 2010数据库引擎独立部署方案 【免费下载链接】Access2010数据库引擎 本仓库提供了Microsoft Access 2010数据库引擎的下载资源。Access数据库引擎是一种重要的组件&#xff0c;它使得开发人员和用户能够在没有安装完整版Microsoft Office的情况下&#xff0c;创建和访问…

作者头像 李华
网站建设 2026/4/17 16:36:00

Java诊断工具多环境部署实战:从单点到集群的配置演进

Java诊断工具多环境部署实战&#xff1a;从单点到集群的配置演进 【免费下载链接】arthas Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas 项目地址: https://gitcode.com/gh_mirrors/ar/arthas 您是否曾遇到过这样的困境&#xff1f;&#x1f61f; 本…

作者头像 李华
网站建设 2026/4/18 7:05:15

InstallerX社区版深度解析:重新定义Android应用安装体验

InstallerX社区版深度解析&#xff1a;重新定义Android应用安装体验 【免费下载链接】InstallerX A modern and functional Android app installer. (You know some birds are not meant to be caged, their feathers are just too bright.) 项目地址: https://gitcode.com/G…

作者头像 李华
网站建设 2026/4/17 18:08:50

4、NCurses 编程:基础 I/O 与文本格式化

NCurses 编程:基础 I/O 与文本格式化 1. NCurses 基础 I/O 操作 在 NCurses 编程中,基础的输入输出操作是非常重要的。下面我们将介绍几个常用的输入函数及其使用方法。 1.1 字符输入读取 在某些程序中,我们可能需要持续读取字符输入,直到遇到特定字符为止。例如,使用…

作者头像 李华
网站建设 2026/4/18 8:02:23

Xcode 26.2 (17C52) 发布 - Apple 平台 IDE

Xcode 26.2 (17C52) 发布 - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接&#xff1a;https://sysin.org/blog/apple-xcode-26/ 查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2025 年 12 月 13 日凌晨…

作者头像 李华