unordered_map和map的区别

unordered_mapmap 都是 C++ STL 中的关联数组容器,用于存储键值对(key-value pairs)。其中,键是唯一的,而值则可以重复。

它们的主要区别在于实现方式不同。map 实现了红黑树,因此可以自动按照键值排序,而且在查找、插入和删除操作中具有较高的效率。但是,红黑树的构建和维护需要较多的时间和空间开销

相比之下,unordered_map 实现了哈希表,因此在查找、插入和删除操作中具有非常高的效率。但是,由于哈希函数的存在,它的元素没有固定的顺序,并且在处理冲突时需要进行额外的开销

因此,如果需要按照键值排序或需要保证元素顺序稳定,可以使用 map;而如果需要快速的查找、插入和删除操作,可以使用 unordered_map

另外,unordered_map 的内存占用通常比 map 大,因为它需要更多的哈希桶来减少冲突。在某些情况下,也可以使用 std::unordered_setstd::set,它们分别实现了哈希表和红黑树,用于存储不重复的元素。

以下是 unordered_mapmap 的代码示例,展示它们在使用上的区别:

#include <iostream>
#include <map>
#include <unordered_map>int main() {// 使用 map 存储键值对,会自动按照键值排序std::map<std::string, int> myMap;myMap["apple"] = 3;myMap["banana"] = 2;myMap["orange"] = 5;myMap["pear"] = 7;// 输出 map 中的元素for (auto it = myMap.begin(); it != myMap.end(); ++it) {std::cout << it->first << ": " << it->second << std::endl;}// 使用 unordered_map 存储键值对,元素没有固定的顺序std::unordered_map<std::string, int> myUnorderedMap;myUnorderedMap["apple"] = 3;myUnorderedMap["banana"] = 2;myUnorderedMap["orange"] = 5;myUnorderedMap["pear"] = 7;// 输出 unordered_map 中的元素for (auto it = myUnorderedMap.begin(); it != myUnorderedMap.end(); ++it) {std::cout << it->first << ": " << it->second << std::endl;}return 0;
}

输出结果可能类似于以下内容:

apple: 3
banana: 2
orange: 5
pear: 7
banana: 2
apple: 3
pear: 7
orange: 5

可以看到,使用 map 存储键值对时,元素会自动按照键值排序;而使用 unordered_map 存储键值对时,元素没有固定的顺序。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据湖delta lake

Table of Content1. 课程2. 前置技能3. 一、数据湖概念[了解] 3.1. 1.1 企业的数据困扰 3.1.1. 困扰一&#xff1a;互联网的兴起和数据孤岛3.1.2. 困扰二&#xff1a;非结构化数据3.1.3. 困扰三&#xff1a;保留原始数据3.1.4. 补充&#xff1a;什么是结构化&#xff1f; 3.1.4…

09 Redis之分布式系统(数据分区算法 + 系统搭建与集群操作)

6 分布式系统 Redis 分布式系统&#xff0c;官方称为 Redis Cluster&#xff0c;Redis 集群&#xff0c;其是 Redis 3.0 开始推出的分布式解决方案。其可以很好地解决不同 Redis 节点存放不同数据&#xff0c;并将用户请求方便地路由到不同 Redis 的问题。 什么是分布式系统?…

音乐格式转换软件有哪些?5款必备神器

音乐格式转换软件有哪些&#xff1f;音乐&#xff0c;作为人类情感的载体&#xff0c;伴随着我们生活的每一个角落。在享受音乐的同时&#xff0c;我们有时也面临着音乐格式不兼容的问题。不用担心&#xff0c;今天我将为大家揭秘五款音乐格式转换软件&#xff0c;让你的音乐之…

华为配置Mesh普通业务示例

配置Mesh普通业务示例 组网图形 图1 配置Mesh组网示意图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 在企业内部各区域通过建立Mesh无线回传链路&#xff0c;实现无线覆盖区域拓展&#xff0c;降低有线部署成本。 组网需求 AC组网方式&#xff1a…

sqllabs的order by注入

当我们在打开sqli-labs的46关发现其实是个表格&#xff0c;当测试sort等于123时&#xff0c;会根据列数的不同来进行排序 我们需要利用这个点来判断是否存在注入漏洞&#xff0c;通过加入asc 和desc判断页面有注入点 1、基于使用if语句盲注 如果我们配合if函数&#xff0c;表达…

面试经典150题——存在重复元素 II

​"The harder you work for something, the greater youll feel when you achieve it." - Unknown 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 该思路很简单&#xff0c;就是暴力的查找每一个元素&#xff0c;查看是否满足题目要求&#xff0c;满足就…

76. 最小覆盖子串(滑动窗口)

用i和j表示滑动窗口的左边界和右边界&#xff0c;思路如下&#xff1a; j右移&#xff0c;直到i-j内包含住了t的所有元素i右移&#xff0c;去除掉左边多余元素保留最小长度&#xff0c;同时i右移&#xff0c;此时确定i-j的子串一定不能完全覆盖t&#xff0c;于是重复1&#xf…

Darkhole 2

kali:192.168.223.128 靶机:192.168.223.152 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.152 开启了22 80 端口 web 进入登录界面发现没有注册按钮了 扫一下目录 gobuster dir -u http://192.168.223.152 -x html,txt,php,bak,zip,git --wor…

单片机精进之路-5矩阵键盘扫描

如下图&#xff0c;先在p3口输出0xfe&#xff0c;再读取p3口的电平&#xff0c;如果没有按键按下&#xff0c;temp & 0xf0还是0xf0&#xff0c;如果又第一个键按下&#xff0c;temp & 0xf0还是0xee&#xff0c;其他按键由此类推可得。 //4*4键盘检测程序,按下键后相应…

Linux的文件操作,重拳出击( ̄︶ ̄)

Linux的文件操作 学习Linux的文件操作&#xff0c;一般需要知道一个文件如果你想要操作他&#xff0c;必须知道你对这个文件有什么操作的权限或者修改你自己对文件操作的权限。必须要知道文件有三种权限 r&#xff1a;可读 w&#xff1a;可写 x&#xff1a;可执行 在打开Linux…

✅鉴权—cookie、session、token、jwt、单点登录

基于 HTTP 的前端鉴权背景cookie 为什么是最方便的存储方案&#xff0c;有哪些操作 cookie 的方式session 方案是如何实现的&#xff0c;存在哪些问题token 是如何实现的&#xff0c;如何进行编码和防篡改&#xff1f;jwt 是做什么的&#xff1f;refresh token 的实现和意义ses…

Java面试题基础(一)

Java 面试题基础&#xff08;一&#xff09; 前言1、面向对象的特征有哪些方面&#xff1f;2、访问修饰符的作用范围&#xff1f;3、Java有哪些数据类型&#xff1f;4、float f 3.4; 是否正确&#xff1f;5、short s1 1; s1 s1 1;对吗? short s1 1; s1 1; 对吗&#xff…

《C++面向对象程序设计》✍学习笔记

C的学习重点 C 这块&#xff0c;重点需要学习的就是一些关键字、面向对象以及 STL 容器的知识&#xff0c;特别是 STL&#xff0c;还得研究下他们的一些源码&#xff0c;下面是一些比较重要的知识&#xff1a; 指针与引用的区别&#xff0c;C 与 C 的区别&#xff0c;struct 与…

Unity中的浮点数

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com Unity float f 0.1f 为什么 $“{f}” 输出的时候会是 0.100000001 C# 中的 $"{}" 是一个字符串插补&#xff08;String Interpolation&#xff09;的语法糖&#xff0c;用于方便地创建和修改字符串…

网络技术ensp 一个简单的交换机配置案例

由于工作调岗&#xff0c;转战网络运维了&#xff0c;第一次网络笔记 1.&#xff0c;目的&#xff1a;2台主机相互可以ping通&#xff0c;并且可以ping通网关地址&#xff0c;设备&#xff1a;2台主机&#xff0c;2台交换机 2网络拓扑图如下 3.主机pc1的配置信息 ip&#xff…

Xcode与Swift开发小记

文章目录 引子Xcode工程结构核心概念Swift语法速记(TODO)小技巧单元测试中使用awaitSwiftUI中使用ListView中取数据 常见问题Xcode添加package时连接github超时Xcode无法修改快捷键&#xff0c;一闪而过 引子 鉴于React Native目前版本在iOS上开发遇到诸多问题&#xff0c;本以…

【SpringBoot3】SpEL表达式详细使用说明

一、介绍 SpEL&#xff08;Spring Expression Language&#xff09;是Spring框架提供的一种功能强大的表达式语言&#xff0c;用于在运行时查询和操作对象。 主要特点和用途包括&#xff1a; 简洁性&#xff1a;SpEL表达式使用简洁的语法&#xff0c;使得在Spring配置和代码…

前端取图片相同颜色作为遮罩或者背景

需求 遮罩层取图片相同/相似的颜色作为遮罩 效果 做法 npm库 grade.js 所提供图像中前 2 个主色生成的互补渐变https://github.com/benhowdle89/grade COLOR THIEF 只需使用Javascript即可从图像中获取调色板。 https://github.com/lokesh/color-thief https://lokeshd…

DNS的意义,DNS不可用该怎么办

DNS是域名系统&#xff0c;它负责将我们输入的网址(如www.baidu.com)转换成计算机可以理解的IP地址(如127.0.0.1)。DNS设置的好坏&#xff0c;直接影响到我们的上网速度和体验。 一、DNS的重要性 在访问一个网站时&#xff0c;首先需要通过DNS将域名解析为对应的IP地址。如果DN…