STL map,插入和查找的一些注意事项

01、前言(废话)

C++ 的 std::map 容器中插入键值对主要有myMap(std::make_pair(key value)) ,它们的区别你了解吗?

auto it = myMap,find(key) 和 auto value = myMap[key] 都可以用于在 C++ 的 std::map 容器中查找键对应的值,但是如果auto value = myMap[key]的key不存在时会有什么问题呢?

下文就详细介绍它们的区别

02、插入

C++ 插入主要有:myMap[key] = valuemyMap(std::make_pair(key,value))

  • myMap[key] = value是通过使用提来访问和修改映射中的值,如果键不存在,则会创建一个新的键值对,并将值插入到映射中,如果键已经存在,则会更新对应的值。
  • myMap(std::make_pair(key value))是通过使用 std:pair 来插入键值对,这种式可以在创建键值对的同时进行初始化,并将其插入到映射中,如果键已经存在,则不会进行更新操作
	map<int, string> myMap;myMap.insert(std::make_pair(10,"abc"));myMap.insert(std::make_pair(10, "abcd"));cout << myMap[10] << endl;myMap[11] = "123";cout << myMap[11] << endl;myMap[11] = "1234";cout << myMap[11] << endl;

运行结果

abc
123
1234

可以看到,调用inset方法时,若果该key已经存在,不会更新该key的值,在调用insert函数的时候需要注意。

03、查看

C++ 的 std::map 容器中查找键对应的值注意是auto it = myMap.find(key)auto value = myMap[key]

  • auto it = myMap,find(key)使用 find 函数来查找键对应的值,如果键存在,则回一个指向该键值对的法代器,如果键不存在,则返回 myMap.end()。
  • auto value = myMap[key] 使用健来直接访问和获取对应的值,如果键存在,则返回对应的值;如果键不存在,则会创建一个新的键值对,并将默认值插入到映射中.
map<int, int> myMap1;
myMap1[2] = 2;
cout <<"myMap1 size = "<< myMap1.size() << endl;
int val1 = myMap1[1];
cout << "val1 = " << val1 << "; myMap1 size = " << myMap1.size() << "; myMap1[2] = " << myMap1[2] << endl;
cout << "-------------------------------------" << endl;map<int, int> myMap2;
myMap2[22] = 22;
cout << "myMap2 size = " << myMap2.size() << endl;
auto it1 = myMap2.find(11);
auto it2 = myMap2.find(22);
if (it1 == myMap2.end())cout << "myMap2 not find 11" << endl;
if (it2 != myMap2.end())cout << "key = " << it2->first << "; value = " << it2->second << endl;
cout << "myMap2 size = " << myMap2.size() << endl;

运行结果

myMap1 size = 1
val1 = 0; myMap1 size = 2; myMap1[2] = 2
-------------------------------------
myMap2 size = 1
myMap2 not find 11
key = 22; value = 22
myMap2 size = 1

注意:使用 myMap[key] 时,如果健的类型是自定义类型,需要确保该类型已经实现了合适的默认构造函数,以便在键不存在时能够插入默认值.

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

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

相关文章

Spring Boot的新篇章:探索2.0版的创新功能

文章目录 引言1. Spring Boot 2.0的响应式编程2. 自动配置的改进3. Spring Boot 2.0的嵌入式Web服务器4. Spring Boot 2.0的Actuator端点5. Spring Boot 2.0的Spring Data改进6. Spring Boot 2.0的安全性增强7. Spring Boot 2.0的监控和追踪8. Spring Boot 2.0的测试改进结论 &…

6、SpringBoot_项目的打包与运行

七、SpringBoot项目的打包与运行 1.目前项目怎么运行的 通过浏览器访问idea 将jar部署到服务器 2.maven 打包项目 命令 mvn package使用命令后会得到如下的jar 3.程序运行 命令 java -jar 项目.jar启动如下 4.springboot打包需要插件 插件 <plugin><group…

c++源码编译过程(翻译阶段)的若干细节概要

c程序的编译主要包含两个阶段&#xff1a;源码编译(翻译阶段)和目标文件链接。 源码编译过程主要有如下这些阶段&#xff1a; 阶段1: 翻译源码文本字符 阶段2: 逻辑源码行标准化处理 阶段3: 文法处理&#xff0c;分解为不同的源码文本类型序列。例如分解为注释、预处理指…

从零学习开发一个RISC-V操作系统(二)丨GCC编译器和ELF格式

本篇文章的内容 一、GCC&#xff08;GUN Compiler Collection&#xff09;1.1 GCC的命令格式1.2 GCC的主要执行步骤1.3 GCC涉及的文件类型 二、ELF简介2.1 ELF文件格式图2.2 ELF文件处理的相关工具2.3 练习 本系列是博主参考B站课程学习开发一个RISC-V的操作系统的学习笔记&…

机器学习第十四课--神经网络

总结起来&#xff0c;对于深度学习的发展跟以下几点是离不开的: 大量的数据(大数据)计算资源(如GPU)训练方法(如预训练) 很多时候&#xff0c;我们也可以认为真正让深度学习爆发起来的是数据和算力&#xff0c;这并不是没道理的。 由于神经网络是深度学习的基础&#xff0c;学…

debug过程中,矩阵左乘右乘相关概念梳理

1. 变换点或者变换向量 1.1左乘 矩阵左乘通常是指对”目标点“进行左乘&#xff0c;即: A ′ R ∗ A AR*A A′R∗A 其中&#xff0c;A为原始3维点&#xff0c;表示一个3*1的列向量&#xff0c;R为33的旋转矩阵&#xff0c;A‘为变换后的点 B ′ T ∗ B BT*B B′T∗B 其中…

uniapp存值和取值方法

在UniApp中&#xff0c;可以使用全局变量、本地缓存和Vuex状态管理等方式来进行存值和取值。 全局变量&#xff1a;可以在App.vue文件的data中定义一个全局变量&#xff0c;在其他页面或组件中通过uni.$emit方法修改其值&#xff0c;并通过uni.$on方法监听值的变化。 // App.…

The 2023 ICPC Asia Regionals Online Contest (1) E. Magical Pair(数论 欧拉函数)

题目 T(T<10)组样例&#xff0c;每次给出一个n(2<n<1e18)&#xff0c; 询问多少对&#xff0c;满足 答案对998244353取模&#xff0c;保证n-1不是998244353倍数 思路来源 OEIS、SSerxhs、官方题解 2023 ICPC 网络赛 第一场简要题解 - 知乎 题解 官方题解还没有…

pip修改位于用户目录下的缓存目录

默认 pip 缓存目录&#xff1a; Windows: C:\Users\${用户名}\AppData\Local\pip\cache Linux: ~/.cache/pip 一、修改方式 1.命令方式 pip config set global.cache-dir "D:\kwok\data\pip-cache" 2.配置文件方式 ① Windows&#xff1a; C:\Users\${用…

SpringBoot2.7.14整合Swagger3.0的详细步骤及容易踩坑的地方

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

docker系列:dockerfile及其用法解析

docker系列 关于dockerfile的简介 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133201059 【介绍】&a…

Portainer -- docker轻型可视化工具

安装和使用 Portainer 非常简单。下面是一些基本步骤&#xff1a; 安装 Docker&#xff1a;Portainer 是一个基于 Docker 的官方容器管理工具&#xff0c;因此首先要确保你的系统上已经安装了 Docker。你可以根据你的操作系统选择合适的方式安装 Docker。 安装 Portainer 容器…

指针笔试题详解

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2.指针题写出下列程序的结…

记一次逆向某医院挂号软件的经历

背景 最近家里娃需要挂专家号的儿保&#xff0c;奈何专家号实在过于抢手&#xff0c;身为程序员的我也没有其他的社会资源渠道可以去弄个号&#xff0c;只能发挥自己的技术力量来解决这个问题了。 出师不利 首先把应用安装到我已经 Root 过的 Pixel 3 上面&#xff0c;点击应…

【重新定义matlab强大系列十五】非线性数据拟合和线性拟合-附实现过程

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

WinApp自动化测试之工具的选择

WinApp&#xff08;Windows APP&#xff09;是运行在Windows操作系统上的应用程序&#xff0c;通常会提供一个可视的界面&#xff0c;用于和用户交互。 例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome&#xff0c;都属于WinApp。常见的WinA…

MySQL高可用

目录 MySQL高可用方案 1、MHA架构&#xff08;单主&#xff09; MHA的工作原理 MHA 架构的优点 MHA 架构的缺点 2、MHA架构的部署 1&#xff09;关闭防火墙和selinux 2&#xff09;分别修改master和slave1&#xff0c;slave2的主机名 3&#xff09;修改master主库服务…

leetcode86 分割链表

题目 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&#xff1…

windows上配置vscode C/C++代码跳转

windows上配置vscode C/C代码跳转 安装插件 C/C 官方的 C/C 插件&#xff0c;必备的插件&#xff0c;是代码跳转、自动补全、代码大纲显示等功能的基础。 Gtags C/C GNU Global GNU Global除了安装该插件之外&#xff0c;还需要在本地下载安装GNU Global工具。多看下插件…

AI智能文案写作工具,迅速生成高质量的文案

大家好&#xff0c;欢迎来到这篇文章。在信息时代&#xff0c;文字的力量愈发重要&#xff0c;无论是用于广告、文章还是社交媒体&#xff0c;优质的文案都能够吸引更多的注意力。但是&#xff0c;对于许多人来说&#xff0c;创作文案可能是一项繁琐且耗时的任务。 147GPT批量文…