【C++STL】map

news2025/1/19 16:28:51

在这里插入图片描述

文章目录

  • 一. map的介绍
  • 二. map的使用
  • 结束语

一. map的介绍

  1. map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素
  2. 在map中,键值key通常用于排序和唯一地标识元素,而value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key和value通过成员类型value_type绑定在一起,为其取别名为pair
    typedef pair<const key,T>value_type;
  3. 在内部,map中的元素总是按照键值key进行比较排序
  4. map中通过键值访问单个元素的速度比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)
  5. map支持下标访问符,即在[]中放下key,就可以找到对应的value
  6. 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[]的作用有四种

  1. 插入
  2. 插入+修改
  3. 修改
  4. 查找

在这里插入图片描述
dict[“left”]只指明了key,则value需要调用string的默认构造
dict[“right”]=“右边”,开始同上,但是[]返回value,我们将其改成"右边"
dict[“string”]=“(字符串)”,前部分返回value的引用,我们将其修改
因为[]会返回value,则也可以查找。

结束语

感谢你的阅读

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

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

相关文章

OSI七层模型、TCP/IP四层模型

OSI七层模型和TCP/IP四层模型 OSI七层模型 物理层&#xff1a;底层数据传输&#xff0c;如网线、网卡标准数据链路层&#xff1a;定义数据基本格式&#xff0c;如何传输如何标识&#xff1b;如网卡MAC地址网络层&#xff1a;定义IP地址&#xff0c;定义路由功能&#xff1b;如…

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—&#xff08;针对上午题&#xff09;二十三种设计模式&#xff08;三十九&#xff09; 一、设计模式的分类 背背背 1 二、创建型设计模式&#xff08;5种&#xff09; 三、简单工厂模式 简单工厂模式代码实现如下&#xff1a; /*** author&#xff1a;Ca…

CentOS分区挂载 fdisk、parted方式解析

1 介绍 在linux中&#xff0c;通常会将持久化数据保存到硬盘当中&#xff0c;但是硬盘一把会比较大&#xff0c;因此我们为了方便管理&#xff0c;会将一个硬盘分成多个逻辑硬盘&#xff0c;称之为分区。 为了能够让分区中的文件使得能让操作系统处理&#xff0c;则需要对分区…

Java阶段二Day11

Java阶段二Day11 文章目录 Java阶段二Day11DQL主键与外键外键约束多对多关系内连接外连接自连接 JDBC核心接口JDBC连接的基本流程 教师总结主键与外键外键约束结论:关联关系中通常不适用外键约束。 多对多关系多对多关联查询例 练习题干答案 内连接语法例 外连接例 自连接定义场…

研报精选230427

目录 【行业230427东方金诚】有色金属行业信用风险回顾与2023年展望 【行业230427头豹研究院】2023年中国汽车安全气囊行业词条报告 【行业230427头豹研究院】2023年中国钠离子负极材料行业词条报告 【个股230427开源证券_佳禾食品】公司首次覆盖报告&#xff1a;植脂末龙头再启…

小匠物联出席宁波第五届家电产业数字化对接会助推家电产业数智化

宁波的家电资源与市场充足&#xff0c;特别是小家电&#xff0c;涉及20多个细分行业、近千个品种&#xff0c;其中10多个细分行业小家电产量一直位居全国或全球首列。但受原材料上涨等多重因素的影响&#xff0c;作为宁波市传统优势产业的家电产业也未能避免&#xff0c;产业数…

ldif 数据转成正确的组织结构再探

上次文章最后有说到按照之前的思路来转化组织结构是有坑的&#xff0c;我们现在还只是对接 AD域&#xff0c;ldap 协议的其他产品在细节上还会有些许不同 我们是不能直接粗暴的认为 cn 就是对应标识一个用户&#xff0c; cn 是 common name 的意思&#xff0c;他也可以表示我们…

【LeetCode】(力扣) c/c++刷题-145. 二叉树的后序遍历

题目&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&a…

线性表的链式存储结构与操作 题目编号:455

题目描述 评论 请你定义一个链表&#xff0c;可以对链表进行“在某个元素之前插入一些元素”、“删除某个位置的元素”、“查找某元素”、“获取某个位置的元素”、“遍历输出所有元素”、“求链表的长度”等操作。键盘输入一些命令&#xff0c;可以执行上述操作。本题中&…

电控针阀和手动可变泄漏阀组合在超高真空度精密PID控制中的应用

摘要&#xff1a;超高真空度的控制普遍采用具有极小开度的可变泄漏阀对进气流量进行微小调节。目前常用的手动可变泄漏阀无法进行超高真空度的自动控制且不准确&#xff0c;电控可变泄漏阀尽管可以实现自动控制但价格昂贵。为了实现自动控制且降低成本&#xff0c;本文提出了手…

线性表的顺序存储结构与操作 题目编号:454

题目描述 请你定义一个顺序表&#xff0c;可以对顺序表进行如下操作&#xff1a; 在某个元素之前插入一些元素 删除某个位置的元素 查找某元素 获取某个位置的元素 遍历输出所有元素 键盘输入一些命令&#xff0c;可以执行上述操作。本题中&#xff0c;顺序表元素为整数&…

【BIM+GIS】Supernap加载实景三维倾斜摄影模型

OSGB是常见的倾斜模型格式,本文讲述如何在Supernap中加载实景三维倾斜摄影模型OSGB。 文章目录 一、生成配置文件二、加载倾斜模型1. 新建场景2. 添加模型3. 高程调整一、生成配置文件 点击【三维数据】→【数据管理】→【生成配置文件】。 参数设置如下: 源路径:选择倾斜模…

荔枝派Zero(全志V3S)开启mplayer,播放音视频

文章目录 前言一、buildroot 配置及编译1、开启 ALSA 和 MPLAY2、编译 二、拷贝到到 SD 卡1、将 rootfs.tar 解压缩到 SD 卡 rootfs 分区②、将 mp4 文件和 mp3 文件拷贝到 SD 卡 rootfs 分区 三、测试1、mplayer 使用2、mplayer 播放音频3、mplayer 播放视频 前言 mplayer 是…

华为在软件工具生态埋下多颗“种子”,静候国产软件产业萌芽

文丨智能相对论 作者丨沈浪 当代的数字经济大厦由各种各样的软件一块一块地搭建起来。然而&#xff0c;站在国内软件行业的中心&#xff0c;热闹的大多是来自上层的软件应用&#xff0c;而沉寂的却总是底层又难又基础的领域&#xff0c;比如软件开发。 软件开发&#xff0c;…

初始新能源汽车

文章目录 电动汽车的三级模块体系VCU&#xff08;整车控制器&#xff09;MCU&#xff08;电机控制器&#xff09;电池包和BMS&#xff08;电池管理系统&#xff09;电动汽车的大三电电动汽车的小三电电动汽车的模块组成 电动汽车的三级模块体系 总体上讲&#xff0c;整个新能源…

牛客刷题篇:客似云来 和 剪花布条(Java)

目录 题目一&#xff1a;客似云来 输入描述 输出描述 解题思路 代码 题目二&#xff1a;剪花布条 输入描述 输出描述 解题思路 代码 题目一&#xff1a;客似云来 链接&#xff1a;客似云来 NowCoder开了一家早餐店&#xff0c;这家店的客人都有个奇怪的癖好&#xff…

算法刷题|1143.最长公共子序列、1035.不相交的线、53.最大子数组和

最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&a…

跨子网通信【路由通信。配置路由】

路由通信条件是&#xff1a;服务器多网卡 or 单网卡多IP 查看路由表 route -n设置一网卡多IP 进行网络配置 进入setup中&#xff0c;选择网络配置 setup选择设备配置 去除DHCP动态协议 进来后&#xff0c;可能会发现无法对静态IP和子网掩码进行编辑&#xff0c;是因为你开启…

Qt - 从零到壹的 打地鼠 游戏

❤️‍&#x1f525;欢迎收看西北风的blog&#xff0c;好男人就是我&#xff0c;我就是西北风。✨ 目录 &#x1f7e5;一&#xff1a;创建一个主窗体 &#x1f7e3;二.&#xff1a;添加主窗口背景图片以及相关部件 &#x1f538;2.1 添加资源文件 2.1.1 添加资源文件 2.1…

NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_实际操作01---大数据之Nifi工作笔记0040

我们基于之前做的从mysql中获取数据,然后同步数据到mysql中,基于这个案例来做,可以看到上面是,这个案例的所有处理器,我们基于这个来改造. 1.首先我这里重新安装了一个mysql8.0.33 ,安装的是windows版本的,如果你是linux版本的,这里也说一下,如何开启binlog功能,首先要开启bin…