map的operator[]

map的operator[]

假设现在有一个统计次数的要求

int main()
{int array[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0, 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };map<int, int> cnt;for(auto& e : array) {cnt[e]++;}for(auto& kv : cnt) {cout<<kv.first << ':' << kv.second << endl;}return 0;
}

[官方文档]([map::operator] - C++ Reference (cplusplus.com))

mapped_type& operator[] (const key_type& k)
{(*((this->insert(make_pair(k,mapped_type()))).first)).second
}

要想理解上面的实现,我们先看一下insert的[文档](map::insert - C++ Reference (cplusplus.com))

single element (1): pair<iterator,bool> insert (const value_type& val);
============================================================
Return value
The single element versions (1) return a pair, with its member pair::first set to an iterator pointing to either the newly inserted element or to the element with an equivalent key in the map. The pair::second element in the pair is set to true if a new element was inserted or false if an equivalent key already existed.
============================================================
插入单个元素的版本(1)返回pair,其成员pair::first设置为一个迭代器,该迭代器指向新插入的元素 或 map中相同key的元素。如果插入了新元素,则pair::中的第二个元素设置为true; 如果已经存在相同key,则设置为false============================================================
即插入成功:返回pair<新插入的元素所在节点的iterator, true>插入失败:返回pair<已经存在元素所在节点的iterator, false>

image-20240623195519535

实际上,可以简化为

// 这里将key_type简化为key,mapped_type简化为V
V& operator[](const K& key)
{pair<iterator, bool> ret = insert(make_pair(key, V()));return (ret.first)->second;
}

有个面试题:当key不在map中时,通过operator[]获取对应value时会发生什么问题?

答:当key不存在时,operator[]用默认value与key构造键值对然后插入,返回该默认value的引用

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

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

相关文章

DjangoRF-4-普通用户注册

1、注册接口&#xff1a;/users/register/ 1.1还是users的model模块&#xff0c; 1.2序列化&#xff0c;在users下进行创建 class UserRegisterSerializer(serializers.ModelSerializer):password_confirm serializers.CharField(label确认密码,help_text确认密码,min_lengt…

VMware、Docker - 让虚拟机走主机代理,解决镜像封禁问题

文章目录 虚拟机全局代理配置找到 VMnet8 的 IPv4 地址代理相关配置虚拟机代理配置 Docker 代理配置修改镜像修改 Docker 代理配置 虚拟机全局代理配置 找到 VMnet8 的 IPv4 地址 a&#xff09;打开此电脑&#xff0c;输入 “控制面板”&#xff0c;然后回车. b&#xff09;之…

使用 Arduino 实现 PID 控制器

使用 Arduino 实现 PID 控制器 PID controller implementation using Arduino (microcontrollerslab.com) In this article, you will learn how to design PID controller using Arduino. PID controller can implemented using both analog and digital electronics. But in…

秋叶大神中文版Stable Diffusion下载安装使用教程

Stable Diffusion是什么&#xff1f; Stable Diffusion是一款开源的AI绘画软件&#xff0c;于2022年发布&#xff0c;由CompVis、Stability AI和LAION的研究人员创建。该软件具有出色的图像生成功能&#xff0c;使用户能够从头开始绘制作品&#xff0c;也可以使用现有的图像进…

打卡第二十五天:递增子序列、全排列、全排列II、重新安排行程、N皇后、解数独

1、递增子序列 题目 文章 视频 这个递增子序列比较像是取有序的子集。而且本题也要求不能有相同的递增子序列。在子集一题中通过排序&#xff0c;再加一个标记数组来达到去重的目的。而本题求自增子序列&#xff0c;是不能对原数组进行排序的&#xff0c;排完序的数组都是自…

LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅

作者&#xff1a;坤硕 背景介绍 随着生成式 AI 概念的火爆&#xff0c;以 ChatGPT 为代表&#xff0c;市场上涌现了一系列商用或者开源的大模型&#xff0c;同时基于大语言模型以及 AI 生态技术栈构建的应用以及业务场景也越来越多&#xff0c;大规模的模型训练以及模型推理场…

python—pandas基础(1)

文章目录 安装设定系统环境Pandas的主要数据结构Series对象创建使用列表创建属性values和index指定index使用list列表指定index传入字典创建&#xff0c;默认将key作为index将一个标量与index对象一起传入创建 DataFrame对象创建创建DataFrame对象values index columns属性列表…

如何查看cpu架构,查看CPU架构的方法

查看CPU架构的方法有很多&#xff0c;具体取决于你使用的操作系统。以下是一些常见的操作系统中查看CPU架构的方法&#xff1a; Windows查看CPU架构的方法 使用系统信息工具 按 Win R 打开运行窗口。输入 msinfo32 并按 Enter。在系统信息窗口中&#xff0c;找到“处理器”一…

WebGoC题解(14) 151.(2017dloi小乙)第5题 巧克力甜度(sweet)

题目描述 妈妈买了n颗甜度不同的巧克力&#xff0c;规定小C只能吃最大甜度之和是S。 例如&#xff1a;有5颗巧克力&#xff0c;s6&#xff0c;每个的甜度分别为&#xff1a; 4 2 3 1 1&#xff0c;那么小C最多可以吃3颗。 请问你能帮小C计算一下最多能吃多少颗巧克力吗? 输入格…

谁说只有车载HMI界面?现在工业类的HMI界面UI也崛起了

谁说只有车载HMI界面&#xff1f;现在工业类的HMI界面UI也崛起了 引言 艾斯视觉作为行业ui设计和前端开发领域的从业者&#xff0c;其观点始终认为&#xff1a;工业自动化和智能化水平不断提高&#xff0c;人机界面&#xff08;Human-Machine Interface&#xff0c;简称HMI&a…

普中51单片机:蜂鸣器的简单使用(十一)

文章目录 引言蜂鸣器的分类工作原理无源蜂鸣器压电式蜂鸣器&#xff1a;电磁式蜂鸣器&#xff1a; 电路符号及应用代码演示——无源蜂鸣器 引言 蜂鸣器是一种常见的电子音响器件&#xff0c;广泛应用于各种电子产品中。它们能够发出不同频率的声音&#xff0c;用于警报、提醒、…

Multi Range Read与Covering Index是如何优化回表的?

上篇文章末尾我们提出一个问题&#xff1a;有没有什么办法可以尽量避免回表或让回表的开销变小呢&#xff1f; 本篇文章围绕这个问题提出解决方案&#xff0c;一起来看看MySQL是如何优化的 回表 为什么会发生回表&#xff1f; 因为使用的索引并没有整条记录的所有信息&…

Mysql索引解析

索引 1.创建索引的SQL ALTER TABLE tbl_name ADD PRIMARY KEY (col_list); // 该语句添加一个主键&#xff0c;这意味着索引值必须是唯一的&#xff0c;且不能为NULL。ALTER TABLE tbl_name ADD UNIQUE index_name (col_list); // 这条语句创建索引的值必须是唯一的。ALTER T…

加入到「圆心学堂」知识星球后,你将获得些什么呢?

大家好呀&#xff0c;我的知识星球上线啦&#xff01;加入到「圆心学堂」知识星球后&#xff0c;您将获得些什么呢&#xff1f; 1.共50套原创精品图文教程电子书&#xff0c;包含1000篇文章&#xff0c;涵盖主流框架、中间件、分布式和微服务等领域&#xff0c;紧跟行业趋势&a…

怎么培养政府机关的公文写作能力?

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 公文写作千万不能零起步&#xff0c;你有时间慢慢学习&#xff0c;但领导哪有时间等你慢慢进步啊。 如果问写公文有什么捷径&#xff0c;那就不得不靠「AI写作工具…

XLua 原理分析 三

前面已经介绍了Lua与C#的基础通信原理&#xff0c;和Wrap中间文件的作用。有了前面2篇的基础&#xff0c;大概已经能搞清这块的原理。 为了加深对这块的印象&#xff0c;这里开始正式分析Xlua中的Lua和C#的通信。 一、Lua如何调用CS的过程 lua的初始化代码&#xff1a; pri…

python基础巩固

基本数据类型 可以用isinstance来判断 a111 isinstance(a,int) True数值运算&#xff1a; >>> 2 / 4 # 除法&#xff0c;得到一个浮点数 0.5 >>> 2 // 4 # 除法&#xff0c;得到一个整数 0 >>> 17 % 3 # 取余 2Python 字符串不能被改变。向一个…

vuex学习day02-state状态、严格模式(strict)、mutations、辅助函数mapMutations、actions

4、state状态 &#xff08;1&#xff09;作用&#xff1a;提供共享数据 &#xff08;2&#xff09;步骤&#xff1a; 1&#xff09;找到仓库&#xff0c;通过state提供共享数据 报错1&#xff1f;&#xff1a; 解决方式&#xff1a; 找到.eslintrc.js文件&#xff0c;添加一…

LabVIEW操作系列1

系列文章目录 我的记录&#xff1a; LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…

python+barcode快速生成条形码3-PyQt6微界面(电商条形码生成工具)

背景 继续上一片文章的电商测试小工具&#xff0c;进行了优化 需求 生成条形码之后&#xff0c;可以通过界面方式读取条形码的图片 支持当个条形码快速生成&#xff0c;以及批量导入 csv文件导入 添加微界面图像按钮&#xff0c;方便操作&#xff0c;更像是在实现测试工具的…