c++map类operator[]详解

定义

让我们来看一下标准库里对该函数的定义.

map::operator[] - C++ Reference (cplusplus.com)

参数是一个key_val类型的值,返回值是对应key 的value值,如果key不存在的话,value会调用其默认构造函数来初始化.

使用

举个例子

int main() {map<string, string> dict{ { "cat","猫" },{"dog","狗"},{"rabbit","兔子"},{"mouse","老鼠"} };cout << dict["bair"] << endl;for (auto e : dict) {cout << e.first << " : " << dict[e.first] << endl;cout << e.first << " : " << e.second << endl;}cout << dict["bair"] << endl;system("pause");return 0;
}

可以看出对于没有进行初始化的bair元素来说,operator[]会创建一个键值对存在map里,对于初始化的元素来说则会返回其key对应的value.

因为我这里的map的value 是srting类型的所以会被初始化为"",即空字符串.    


因为operator[]返回值是value类型的引用所以也可以进行修改

int main() {map<string, string> dict{ { "cat","猫" },{"dog","狗"},{"rabbit","兔子"},{"mouse","老鼠"} };dict["cat"] = "哈基米";	//for (auto e : dict) {cout << e.first << " : " << dict[e.first] << endl;}system("pause");return 0;
}

底层实现

cplusplus(第一张图片那个)网站给了一个建议的实现:(*((this->insert(make_pair(k,mapped_type()))).first)).second

看着很吓人,我来解释一些实现原理

std::map::insert重载了很多,这里的意思是传入一个pair<K,V>类型的值,返回一个pair<iterator,bool>

如果对应的k存在,iterator指向k,bool为false;k不存在,插入iterator指向新的k,bool为true.

Class map{
V& operator[](K& k){return (*((this->insert(make_pair(k,mapped_type()))).first)).second;
}//    通过这一串代码即可实现有key寻值/改值的操作
};

感谢观看!!!!

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

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

相关文章

基于springboot的高校宣讲会管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

Ubuntu解密:Root账户登录问题一网打尽

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Ubuntu解密&#xff1a;Root账户登录问题一网打尽 前言Root用户简介Root账户无法登录的原因重设Root账户密码解决ssh不能root登录问题安全性考虑 前言 Ubuntu作为广受欢迎的Linux发行版&#xff0c;对…

Vue3+ts(day03:ref和reactive)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…

Docker 入门篇(二)-- Linux 环境离线安装

引言 docker 系列文章&#xff1a; Docker 入门篇&#xff08;一&#xff09;-- 简介与安装教程&#xff08;Windows和Linux&#xff09; 一、安装环境准备 centos &#xff1a;CentOS Linux release 7.6.1810 (Core)docker 版本&#xff1a;docker-26.1.0.tgz 官网下载地址…

Sy8网络管理命令(ubuntu23.10和centos8)

前言、 本次实验主要是扩展学习&#xff0c;不仅限在课本的内容。毕竟课本的内容太过于陈旧了。需要的童鞋看看。 说明&#xff1a;&#xff08;书本中sy9”第3.实验内容“大家还是要做下。&#xff09; 1、使用ubuntu做实验的童鞋只要看第二、三、四、七章节的部分内容。 2、使…

react-lib 读取本地模板创建PDF

读取本地文件和读取远程的一样&#xff0c;都使用fetch去获取 async function modifyPdf() {let url ./template.pdflet existingPdfBytes await fetch(url).then(res > res.arrayBuffer()) // 这里也有问题要转一下const d new Uint8Array(existingPdfBytes)const pdfDo…

区块链技术与应用学习笔记(1-4节)——北大肖臻课程

目录 1. 区块链初识(课程简介&#xff09; 被过度炒作&#xff0c;落地应用有限&#xff1f; 下一代的价值互联网&#xff1f;世界上最慢的数据库&#xff1f; 2. BTC-密码学原理&#xff08;比特币&#xff09; 1)哈希 哈希函数特点 个人学习所得 2)签名 个人对于…

基于yolov5实时实例分割

是一个结合了最新技术进展&#xff08;State-of-the-Art, SOTA&#xff09;的实时实例分割项目&#xff0c;基于著名的YOLOv5目标检测架构&#xff0c;并对其进行扩展以实现对图像中每个对象实例的精确像素级分割。以下是该项目的中文介绍&#xff1a; YOLOv5&#xff1a; YOL…

实习算法准备之BFSDFS

这里写目录标题 1 理论1.1 BFS框架 2 例题2.1 二叉树的最小高度2.2 打开转盘锁2.3 滑动谜题 1 理论 BFS和DFS是两个遍历算法&#xff0c;其中DFS之前已经接触过&#xff0c;就是回溯&#xff0c;忘记的话请回顾回溯篇的例题&#xff08;全排列&#xff0c;N皇后&#xff09; B…

Lagent AgentLego 智能体应用搭建-笔记六

本次课程由Lagent&AgentLego 核心贡献者樊奇老师讲解【Lagent & AgentLego 智能体应用搭建】课程 课程视频&#xff1a;https://www.bilibili.com/video/BV1Xt4217728/ 课程文档&#xff1a;https://github.com/InternLM/Tutorial/tree/camp2/agent 大语言模型的局限…

【C++】哈希思想

目录 哈希介绍&#xff1a; 一&#xff0c;位图 1-1&#xff0c;位图的认识 1-2&#xff0c;位图的简单实现 1-3&#xff0c;位图的应用 二&#xff0c;布隆过滤器 2-1&#xff0c;布隆过滤器的认识 2-2&#xff0c;布隆过滤器的简单实现 2-3&#xff0c;布隆过滤器的…

LIUNX系统编程:动态库的制作

目录 1.将add.c和sub.c编译形成.o文件 2.讲add.o和sub.o打包成库 3.Makefile 4.细节问题 5.解决办法 1.直接将自己的库拷贝到库中 2.更改动态库辅助查找的环境变量 3. 在lib64中建立一个软连接 1.将add.c和sub.c编译形成.o文件 gcc -c -fPIC add.c sub.c// fPIC生成位置…