【C++STL】map

文章目录
- 一. map的介绍
- 二. map的使用
- 结束语
一. map的介绍
- map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素
- 在map中,键值key通常用于排序和唯一地标识元素,而value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key和value通过成员类型value_type绑定在一起,为其取别名为pair
typedef pair<const key,T>value_type;- 在内部,map中的元素总是按照键值key进行比较排序
- map中通过键值访问单个元素的速度比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)
- map支持下标访问符,即在[]中放下key,就可以找到对应的value
- map 通常被实现为二叉搜索树(更准确的说,平衡二叉搜索树(红黑树))。
二. map的使用
map中存储的是pair
T1 first就是key值,T2 second就是value值
template <class T1, class T2>
struct pair
{
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair(): first(T1()), second(T2())
{}
pair(const T1& a, const T2& b): first(a), second(b)
{}
};
insert插入

我们测试一下map的插入

首先map存储的是pair这一数据类型,我们可以使用pair<string,string>的匿名构造,但是这样写法较为复杂。
C++就提供了一个make_pair的仿函数

使用make_pair这个仿函数的好处,一是写法较为简便,二是其会自动推导类型,所以不需要像pair匿名构造那样需要指明类型。
其次,map的迭代器解引用返回的是pair结构体,不能直接输出,需要再指定其内部属性。

不过map重载了->,可以直接使用->输出。二者效果相同

operator[]重载
如果我们要统计水果的个数,可以这样统计

我们也可以使用map的operator[]重载完成需求

我们解析一下operator[]


调用operator[]实际是调用这一大坨东西,我们对其进行一个拆分

make_pair的返回值就是一个pair,但是我们看到这里也使用了insert的返回值
接下来我们讲解一下insert的返回值

insert插入的value_type其实就是pair,返回值也是一个pair,但是这个pair的第一个参数是一个迭代器,第二个参数是一个bool值
根据文献的描述,如果插入的元素在map中不存在,则插入,返回的迭代器指向该元素位置,如果已存在,返回的迭代器指向该元素在map中的位置;第二个bool值,如果是新插入元素,则返回真,若元素已存在,返回假。
所以( this->insert( make_pair( k,mapped_type() ) ) )其实就是一个pair<iterator,bool>
再取pair的的first,就是iterator,再解引用取到指向的pair,最后取second属性,就是value。并且返回该value的引用
所以,如果水果不存在,就插入,value因为是int,会调默认构造,初始化为0,然后返回value的引用,++就变成1了
如果水果存在,不会插入,但还是会返回value的引用,++就让value的值变大了。
所以operator[]的作用有四种
- 插入
- 插入+修改
- 修改
- 查找

dict[“left”]只指明了key,则value需要调用string的默认构造
dict[“right”]=“右边”,开始同上,但是[]返回value,我们将其改成"右边"
dict[“string”]=“(字符串)”,前部分返回value的引用,我们将其修改
因为[]会返回value,则也可以查找。
结束语
感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。

相关文章:
【C++STL】map
文章目录 一. map的介绍二. map的使用结束语 一. map的介绍 map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素在map中,键值key通常用于排序和唯一地标识元素,而value中存储与此键值…...
vue2项目PC端如何适配不同分辨率屏幕
项目构建:基于vue-cli3构建,使用postcss-px2rem px2rem-loader进行rem适配 实现原理:每次打包,webpack通过使用插件postcss-px2rem,帮我们自动将px单位转换成rem单位前方有坑:UI框架部分组件使用JavaScript…...
CorelDRAW2023最新版本图像设计软件
CorelDRAW 2023作为最新版的图像设计软件,在功能上做了较大提升,主要新的功能特性如下: 1. 全新界面设计:采用简约现代的 UI 设计,菜单和工具重新组织,更加直观易用。提供自动提示与设计指导,易于上手。 2. 智能工具与提示:运用 AI技术对用户操作行为和设计习惯进行分析,给出…...
第64章 树型结构数据的前端渲染渲染显示示例
1 \src\views\TreeTestView.vue <template> <div class"wrap"> <!--注意:1、“回到顶部”组件及其回滚内容都必须包含到同1个div容器中。--> <!-- 2、div容器中必须有1个唯1性的样式类(例如:wrap)…...
超级国际象棋:第二个里程碑已完成
获取Cartesi资助的项目的最新进展,现在将完全去中心化的Web3国际象棋带到你的手中 “Ultrachess是一个完全基于区块链的国际象棋应用程序,由Cartesi Rollup技术支持,允许用户将真实价值投入到比赛中,不仅仅是他们的Elo分数。 此…...
vue3 HTML 和静态资源
目录 静态资源可以通过两种方式进行处理: URL 转换规则 public 文件夹 何时使用 public 文件夹 public/index.html 文件是一个会被 html-webpack-plugin 处理的模板。在构建过程中,资源链接会被自动注入。另外,Vue CLI 也会自动注入 re…...
5G基站外市电改造建设方案 (ppt可编辑)
本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 外市电定义及分类 定义:由供电部门提供的专用高压电源或非专用高压电源或低压电源均称为市电。分类: (1)按电压等级分类 ①提供…...
C++ 类和对象(上)
类 面向对象的三大特性:封装,继承,多态 C语言结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。比如: 之前在数据结构初阶中,用C语言方式实现的栈,…...
【BIM+GIS】BIM模型导入GIS软件之前的一些处理设置
文章目录 一、模型位置发生偏移二、模型对象丢失或增加三、模型材质发生变化四、导出过程缓慢五、模型属性批量丢失一、模型位置发生偏移 在视图→可见性/图形替换模型类别→场地(VV可见性快捷),勾选项目基点。 单击选中项目基点,在属性中修改几点坐标。 即使修改了项目基…...
js FileReader的常用使用方法
FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。 主要的读取方法: readAsArrayBuffer(): 开始读取指定的 Blob 中的内…...
网络威胁情报:数据的力量
在一个日益互联和数字化的世界中,网络威胁已成为一项重大挑战,可能危及您组织的声誉、财务稳定性和整体运营效率。 事实上,根据 IBM 2022 年的一份报告,数据泄露的平均成本现在为 435 万美元。 鉴于网络威胁的重要性和影响日益突…...
shell:清理指定目录中指定天数之前的旧文件
前言 我们在服务器运行一些服务经常会产生很多临时文件,而有些临时文件不定期处理很容易就打满了整个磁盘;所以有必要去定期清理,基于这个需求我们就可以搞一个脚本结合crontab或者服务调度这些来使用; 脚本实现 #!/bin/bash# …...
想入门网络安全?先来看看网络安全行业人才需求!
如果你是一个想要入门网络安全行业的小白、如果你是网络安全专业在读的大学生、如果你是正在找工作的新手,那么这篇文章你一定要仔细看。毕竟知己知彼百战百胜,知道行业的人才需求才能更好得发挥自己的优势。 当你打开BOSS直聘、拉钩等招聘网站…...
0424 spring AOP学习
AOP是指什么? 面向切面编程,Aspect Oriented Program。是一种编程范式、思想。 Spring AOP里涉及的AOP原理叫什么? 动态代理。 动态代理其实就是在运行时动态的生成目标对象的代理对象,在代理对象中对目标对象的方法进行增强。…...
GB/T 28181-2022 新版差异笔记
GB/T 28181-2022 新版差异笔记 文章目录 GB/T 28181-2022 新版差异笔记更改了标准范围删除部分术语和定义增加PTZ缩略语更改SIP监控域互联结构图更改了“联网系统通讯协议结构图”增加了媒体流数据传输的RTP时间戳要求增加了对H.265、AAC的支持更改了SDP协议的引用更改了与其他…...
以轻量级服务器niginx为核心的JavaWeb项目:第一章 项目设计
这里写目录标题 一 需求分析与环境搭建1.需求分析2.环境搭建1.2.1首先配置mysql环境1.2.2 配置maven环境 二 打成War包,发到linux上 一 需求分析与环境搭建 1.需求分析 2.环境搭建 1.2.1首先配置mysql环境 先查找一下mysql环境 [roothadoop122 ~]# mysql --vers…...
【error】 Request method ‘GET‘ not supported app端调用后台接口报错,后台人员自己调用时没问题
目录 问题描述原因分析解决方案方法一:方法二:方法三: 联系自身 问题描述 org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘GET’ not supported at org.springframework.web.servlet.mvc.method.Request…...
Microsoft Bitlocker企业级管理部署方案
目录 一、前言 二、BitLocker部署前的准备工作 三、BitLocker的部署方式 3.1 通过群组策略部署BitLocker...
Jetpack Compose 中使用分页 API 调用的无限滚动
Jetpack Compose 中使用分页 API 调用的无限滚动 最近,我在DashCoin 的硬币屏幕上添加了一个带有分页 API 调用的无限滚动。它使浏览硬币列表变得非常困难,并且确实减少了初始加载时间,比以前少了。如果没有正确实施,实施无限滚动…...
第5章 数据结构之“链表”
链表简介 1.多个元素组成的列表。 2.元素的存储不连续,用next指针连在一起。 数组 vs 列表 数组:增删非手尾元素时往往需要移动元素。如果要在数组中增加一个元素,数组后面的所有元素需要往后面移动一位。如果在数组中删除一个元素&#x…...
如何快速配置ImageGlass:Windows上最轻量的开源图片查看器完整指南
如何快速配置ImageGlass:Windows上最轻量的开源图片查看器完整指南 【免费下载链接】ImageGlass 🏞 A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 还在为Windows自带的图片查看器功能有限而烦…...
如何永久激活IDM?2024终极免费激活与试用重置完全指南
如何永久激活IDM?2024终极免费激活与试用重置完全指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script IDM Activation Script是一款专为Internet Dow…...
在VS Code中结合Taotoken API快速构建代码辅助工具
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在VS Code中结合Taotoken API快速构建代码辅助工具 对于希望提升编码效率的开发者而言,将AI能力深度集成到日常开发环境…...
地质建模革命:如何使用GemPy在10分钟内构建专业3D地质模型 [特殊字符]
地质建模革命:如何使用GemPy在10分钟内构建专业3D地质模型 🚀 【免费下载链接】gempy GemPy is an open-source, Python-based 3-D structural geological modeling software, which allows the implicit (i.e. automatic) creation of complex geologic…...
如何实现快速排名?老站降权后恢复收录的4步挽救法
企业站点日常维护期间,可能遭遇搜索访问量大面积滑坡。周一早晨九点登录系统,常会看到令人震惊的数据:原先稳定排在搜索结果前十名的50个主商业名词,在一夜之间完全不见踪迹。管理控制台页面显示的单日整体曝光量从25000次骤然缩减…...
从零到一:基于YOLOv8的AI自瞄终极指南
从零到一:基于YOLOv8的AI自瞄终极指南 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot 想象一下,你正在玩最喜欢的FPS游戏,敌人从掩体后一闪而过&…...
11 极物科技 JetLinks MQTT 直连设备功能调用完整流程与 Python 实现
1. 前言 JetLinks作为开源的IoT物联网平台,提供了完善的设备接入、物模型管理、功能调用等核心能力,其中MQTT协议是设备与平台直连的主流方式。本次测试以继电器设备为核心测试载体,继电器具备明确的“通/断”二元状态,且状态变更…...
OpenSpec+Qoder 规范AI编程助手
OpenSpec 是 Fission AI 团队开源、面向 AI 编程助手的「规范驱动开发」轻量级框架与 CLI 工具,核心是 Spec First, Code Later(先定规范、再写代码),解决 AI 编程需求跑偏、上下文丢失、结果不可控的问题。 现根据下面的官网安装…...
程序员会被产品经理替代吗?——当AI让“全栈”成为常态,我们的价值在哪里?
程序员会被产品经理替代吗?——当AI让“全栈”成为常态,我们的价值在哪里? 最近,V2EX上一个帖子引发了激烈讨论:随着AI能力的指数级增长,一个人就能完成从前需要整个团队才能做到的全栈开发。如果产品经理借…...
从登录页到仪表盘:手把手教你为Vue2+Element后台管理系统添加中英文切换
从登录页到仪表盘:Vue2Element后台管理系统国际化实战指南 当产品经理突然要求为已有后台管理系统添加多语言支持时,许多开发者会陷入手忙脚乱的境地。本文将分享一套经过实战检验的国际化方案,不仅能快速实现基础功能,还能解决那…...
