C++ - unordered系列关联式容器介绍 - 和 set map 的比较

 前言

 C++ - map 和 set 使用介绍_chihiro1122的博客-CSDN博客

C++ - map 和 set的 例题_chihiro1122的博客-CSDN博客

C++ - map 和 set 的模拟实现上篇 - 红黑树当中的仿函数 - 红黑树的迭代器实现-CSDN博客、

C++ - set 和 map 的实现(下篇)- set 和 map 的迭代器实现_chihiro1122的博客-CSDN博客

unordered_map容器 和 unordered_set 容器

这里的两个容器和之前的 map 和 set 是不一样的两个容器。之前两个容器的底层是使用 红黑数实现的,迭代器也是使用的红黑树的迭代器。而 unordered_map容器 和 unordered_set 容器 的底层是哈希表,这两对之间的底层实现是完全不一样的。

 但是两者之间使用的 方式基本是一样的:

 大概功能函数:

map:

set:

 唯二和 set 和 map 不同的,多出了 哈希桶当中的功能函数;还有,unordered 当中的迭代器不是双向迭代器,而 map 和 set 当中是双向迭代器。

因为 unordered_map 和 unordered_set 的底层都是 哈希表实现的,所以当我们顺序输出这个 容器当中的内容的时候,不是有序的,但是去重的效果还是可以实现。因为 哈希表是 高效的查找,但是其中元素的排列并不是完全有序的,按照一定规律排列在 其中,如下使用例子:

	unordered_set<int> s;s.insert(3);s.insert(10);s.insert(50);s.insert(43);s.insert(22);unordered_set<int>::iterator it = s.begin();for (auto e : s){cout << *it << endl;++it;}

输出:

43
3
50
10
22

 当然,两个容器也都有没有去重效果的 multi 版本:

 当然,unordered_map 的使用和 map 也差不多,具体可以参考 map 和 set 的博客:

C++ - map 和 set 使用介绍_chihiro1122的博客-CSDN博客

 unordered_map 和 unordered_set 在find()函数(查找)上,和 map 和 set 的查找两对的效率还是差不多的,基本一致,

但是 unordered_map 和 unordered_set 在insert()插入 和 erase()删除结点的效率上,如果是插入的数据重复数据较多,两者的效率要比 map 和 set 高出几倍;

如果是插入的数据少,和很少有重复的情况下,两对的插入效率差不多(但是如果插入的数据量太大,unordered_map 和 unordered_set 两个容器反而没有占到便宜,要比 map 和 set 效率低),但是删除效率还是 unordered_map 和 unordered_set 要 明显优于 map 和 set。

如果是有序的数据,那么 unordered_map 和 unordered_set 除了在 查找上和 map set 一样,但是在 插入和删除上的效率就要比 上述两种情况的效率要更低了,unordered_map 和 unordered_set 在这种情况之下逃不了多少好处。

所以,我们看到,两种方式实现的 map 和 set都在各自的适应的情况下有着不低于对方的效率,我们要看当前场景来选择适用于当前场景的 这 四种容器。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143392.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

自定义热加载:如何不停机实现核心代码更新

文章目录 1. 常见的几种实现代码热更新的几种方式对于开发环境我们可以使用部署环境1. 使用 Arthas 的 redefine 命令来加载新的 class 文件2. 利用 URLClassLoader 动态加载3. 通过Java的Instrumentation API 也是可以实现的 2. 实现1. ClassScanner扫描目录和加载类2. 定时任…

Grafana 开源了一款 eBPF 采集器 Beyla

eBPF 的发展如火如荼&#xff0c;在可观测性领域大放异彩&#xff0c;Grafana 近期也发布了一款 eBPF 采集器&#xff0c;可以采集服务的 RED 指标&#xff0c;本文做一个尝鲜介绍&#xff0c;让读者有个大概了解。 eBPF 基础介绍可以参考我之前的文章《eBPF Hello world》。理…

【Git】轻松学会 Git(一):掌握 Git 的基本操作

文章目录 前言一、创建 Git 本地仓库1.1 什么是仓库1.2 创建本地仓库1.3 .git 目录结构 二、配置 Git三、认识 Git 的工作区、暂存区和版本库3.1 什么是 Git 的工作区、暂存区和版本库3.2 工作区、暂存区和版本库之间的关系 四、添加文件4.1 添加文件到暂存区和版本库中的命令4…

深度学习-优化器

1.梯度下降 最开始的梯度下降算法&#xff0c;更新权重的方法是theta theta - learning_rate * gradient(loss),loss是损失函数。但是这种方法只关心当前的梯度&#xff0c;如果坡度较缓&#xff0c;则它依然会以一种缓慢的速度下降&#xff0c;我们先举个例子&#xff0c;使…

光耦的原理和作用

光耦又叫光电耦合器。 这个是四脚光耦的电路符号&#xff0c;12之间是一个发光二极管&#xff0c;34之间是一个光电三极管&#xff0c;光藕就相当于把发光二极管和光电三极管封装在一个密闭的壳体中的器件。 当光耦发光二极管两端没有电压或电压不足使他导通时&#xff0c;发光…

2023-9-27 JZ55 二叉树的深度

题目链接&#xff1a;二叉树的深度 import java.util.*; /** public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;}} */ public class Solution {public int TreeDepth(TreeNode root) {if(root null) ret…

什么是HTTP/2?它与HTTP/1.1相比有什么改进?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTTP/2 简介⭐ 主要的改进和特点⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端…

二叉树MFC实现

设有一颗二叉树如下&#xff1b; 这似乎是一颗经常用作示例的二叉树&#xff1b; 对树进行遍历的结果是&#xff0c; 先序为&#xff1a;3、2、2、3、8、6、5、4&#xff0c; 中序为&#xff1a;2、2、3、3、4、5、6、8&#xff0c; 后序为2、3、2、4、5、6、8、3&#xff1b…

Java编译运行结果乱码

一、问题 编译运行结果乱码 二、处理方法 方法1&#xff1a;将.java文件另存为编码设置为ANSI 方法2&#xff1a;使用命令参数 encoding javac -encoding utf-8 csdn.java 当你文件编码格式是utf-8需要指定java编译器的编码格式&#xff0c;如果没有用到encoding参数指定ja…

渗透测试中的前端调试(一)

前言 前端调试是安全测试的重要组成部分。它能够帮助我们掌握网页的运行原理&#xff0c;包括js脚本的逻辑、加解密的方法、网络请求的参数等。利用这些信息&#xff0c;我们就可以更准确地发现网站的漏洞&#xff0c;制定出有效的攻击策略。前端知识对于安全来说&#xff0c;…

代码随想录 Day7 字符串1 LeetCode T344反转字符串 T541 反转字符串II 151翻转字符串的单词

本文更详细解析来自于:代码随想录 (programmercarl.com) LeetCode T344 反转字符串 链接:344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 题目思路 这题的思路很简单,只需要创建两个指针,一个指向首字母,一个指向末字母,两两进行交换即可,这里我们要说的就是交换,可…

实验室安全教育与考试

目录 我的错题&#xff08;2个&#xff09;新知识题目&#xff08;10个&#xff09;刚开始不太理解的题目&#xff08;10个&#xff09;写在最后&#xff08;免责声明&#xff09; 我的错题&#xff08;2个&#xff09; 18.发生电气火灾时可以使用的灭火设备包括&#xff1a;&…

WebSocket的那些事(6- RabbitMQ STOMP目的地详解)

目录 一、目的地类型二、Exchange类型目的地三、Queue类型目的地四、AMQ Queue类型目的地五、Topic类型目的地 一、目的地类型 在上节 WebSocket的那些事&#xff08;5-Spring STOMP支持之连接外部消息代理&#xff09;中我们已经简单介绍了各种目的地类型&#xff0c;如下图&…

【数据结构】—超级详细的归并排序(含C语言实现)

​ 食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f525;这就不得不推荐此专栏了&#xff1a;C语言 ♈️今日夜电波&#xff1a;斜陽—ヨルシカ 0:30━━━━━━️&#x1f49f;──────── 3:20 …

vue项目 H5 动态设置浏览器标题

1&#xff0c;先将要展示的标题存本地 if (that.PromotionInfo.Title) {localStorage.setItem("AcTitle", that.PromotionInfo.Title)} 2,现在路由meta中设置标题&#xff0c;再在路由守卫中设置 import Vue from vue import Router from vue-router import prom…

新手程序员怎么接单?

程序员如何在自己年富力强的时候&#xff0c;最大化发挥自己的能力&#xff1f;将超能力转化为“钞能力”&#xff1f; 有人还在苦哈哈当老黄牛&#xff0c;一身使不完的牛劲&#xff0c;有人已经另辟蹊径&#xff0c;开创了自己的一片致富小天地。 接单找兼职&#xff0c;就…

4k、VR与万兆光网

“全光万兆”对VR意义重大。 pico4的分辨率 PICO 4 的单眼分辨率是 2160 2160&#xff0c;整体分辨率高达 4320 2160。这是一款高性能的 VR 一体机&#xff0c;采用了 2.56 英寸的 Fast-LCD 屏幕&#xff0c;最高可实现 90Hz 刷新率&#xff0c;还有 1200 PPI 和 20.6 PPD 的…

线性约束最小方差准则(LCMV)波束形成算法仿真

常规波束形成仅能使得主波束对准目标方向&#xff0c;从而在噪声环境下检测到目标&#xff0c;但无法对复杂多变的干扰做出响应&#xff0c;所以不能称之为真正意义上的自适应滤波。自适应阵列处理指的是采用自适应算法对空间阵列接收的混合信号进行处理&#xff0c;又可称为自…

Android---打开相机拍照

简单实现打开系统系统相机拍一张图片并显示在UI上&#xff0c;适用与个人主页头像的切换。 1. 添加权限。AndroidManifest.xml里添加使用相机的权限。 <uses-permission android:name"android.permission.CAMERA"/> 2. 布局。布局内容比较交单&#xff0c;一…

[Java | Web] JavaWeb——JSON与AJAX简介

目录 一、JSON 简介 1、什么是 JSON 2、JSON 的定义和访问 3、JSON 在 JS 中两种常用的转换方法 4、JSON 在 Java 中的使用 5、匿名内部类 二、AJAX 简介 1、什么是 AJAX 2、原生 JS 的 AJAX 请求示例 3、JQuery 中的 AJAX 请求 一、JSON 简介 1、什么是 JSON JSON…