news 2026/6/10 15:47:09

【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/6/10 12:48:40

全桥LLC谐振变换器变频 - 移相混合控制仿真探索

全桥LLC谐振变换器变频-移相混合控制仿真。 [1]参考文献&#xff1a;《全桥LLC谐振变换器的混合式控制策略_李菊》 拓宽电压范围。 保证mos管的ZVS零电压开通和二极管的ZCS零电流关断。 [2]模式切换&#xff1a; ①当输入&#xff1c;输出电压时&#xff0c;变换器处于升压模式…

作者头像 李华
网站建设 2026/6/10 15:01:51

离职证明不见了怎么办?这份专业模板帮您轻松解决

离职证明不见了怎么办&#xff1f;这份专业模板帮您轻松解决 【免费下载链接】公司离职证明模板下载 公司离职证明模板下载 项目地址: https://gitcode.com/Open-source-documentation-tutorial/97c73 您是否遇到过这样的情况&#xff1a;突然需要离职证明&#xff0c;却…

作者头像 李华
网站建设 2026/6/10 14:04:15

5分钟掌握Gumroad:新手卖家的完整销售平台指南

5分钟掌握Gumroad&#xff1a;新手卖家的完整销售平台指南 【免费下载链接】gumroad 项目地址: https://gitcode.com/GitHub_Trending/gumr/gumroad 在数字创作时代&#xff0c;如何高效销售产品成为每个创作者面临的核心挑战。Gumroad作为一款功能全面的在线销售平台&…

作者头像 李华
网站建设 2026/6/10 14:03:15

macOS Sequoia 15.7.3 (24G419) Boot ISO 原版可引导映像下载

macOS Sequoia 15.7.3 (24G419) Boot ISO 原版可引导映像下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接&#xff1a;https://sysin.org/blog/macOS-Sequoia-boot-iso/ 查看最新版。原创作品&#xff0c…

作者头像 李华
网站建设 2026/6/9 22:44:44

Apache Doris 2.1.10 集群部署与 Paimon 数据湖集成实战文档

目录 1. 环境概述 1.1 硬件与系统信息 1.2 节点规划 1.3 依赖组件 (CDH) 2. 基础环境准备 (所有节点) 2.1 检查 CPU AVX2 支持 2.2 操作系统优化 2.3 配置 Hosts 映射 2.4 创建目录与授权 3. FE (Frontend) 部署 3.1 安装与配置 3.2 启动 FE 集群 4. BE (Backend) …

作者头像 李华
网站建设 2026/6/10 5:03:43

计算机毕设java智慧阅读平台 基于Java的智能阅读管理系统设计与实现 Java技术驱动的智慧阅读平台开发与应用

计算机毕设java智慧阅读平台74h4p9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着信息技术的飞速发展&#xff0c;数字化阅读已经成为现代学习和生活方式的重要组成部分。传…

作者头像 李华