C++ map 的使用

在这里插入图片描述

下面的是关于 map 的介绍。来自 map - C++ Reference (cplusplus.com) 的翻译,您可以看也可以不看哈!

  1. map 是关联容器,它按照特定的次序(按照 key 来比较)存储由键值 key 和值 value组合而成的元素。
  2. 在 map 中,键值 key 通常用于排序和惟一地标识元素,而值 value 中存储与此键值 key 关联的内容。键值 key 和值 value 的类型可能不同,并且在 map 的内部,key 与 value 通过成员类型 value_type 绑定在一起,为其取别名称为 pair: typedef pair value_type
  3. 在内部,map 中的元素总是按照键值 key 进行比较排序的。
  4. map 中通过键值访问单个元素的速度通常比 unordered_map 容器慢,但 map 允许根据顺序对元素进行直接迭代(即对 map 中的元素进行迭代时,可以得到一个有序的序列)。
  5. map 支持下标访问符,即在 [] 中放入 key,就可以找到与 key 对应的 value。
  6. map 通常被实现为二叉搜索树(更准确的说:红黑树)。

默认构造函数

map 的构造函数不止默认构造函数哈!他还可以使用一段迭代器区间来初始化一个 map,当然他还有拷贝构造函数。不过在平时刷算法题的过程中使用次数最多的还是默认构造函数啦!要使用 C++ 的 map 需要包含头文件:

#include<iostream>
#include<map>
using namespace std;int main()
{map<int, int> m; //定义一个 map,你要理解map 的底层就是红黑树,红黑树我们不是都实现过了嘛,红黑树怎么定义,map就怎么定义return 0;
}

pair<iterator,bool> insert (const pair<key, val>& val);

这里的 key 和 value 都是模板参数哈!

这个函数就是向 map 里面插入一个节点。如果插入成功了,那么返回值中的 first 就是新插入的节点对应的迭代器,返回值中的 second 就是 true;如果插入失败了,那么返回值中的 first 就是与新插入的节点的 first 相同的那个节点的迭代器(map 中 key 值是不能够重复的),返回值中的 second 就是 false。

#include<iostream>
#include<map>
using namespace std;int main()
{map<int, int> m;auto p = m.insert({1,1}); //向 map 中插入键值对 1,1//输出:1, 1 表示新插入节点的 value 值为 1 ,插入的结果为 1 (true)cout << (*(p.first)).second << " " << p.second << endl; //根据返回值来读取新插入节点的数据auto q = m.insert({1,2}); //向 map 中插入键值对 1,2//输出:1, 0 表示已经存在相同的key值,对应的value值为 1,插入的结果为 0 (false)cout << (*(q.first)).second << " " << q.second << endl;return 0;
}

map 的删除函数

size_t erase (const key& k)

这个函数可以删除 map 中 key 值为 k 的节点,返回值是返回删除节点的个数。

#include<iostream>
#include<map>
using namespace std;int main()
{map<int, int> m;m.insert({1,1});m.insert({2,2});m.insert({3,3});m.insert({4,4});m.insert({5,5});m.insert({5,5});cout << m.erase(5) << endl; //输出 1 cout << m.erase(0) << endl; //输出 0 return 0;
}

我们都知道 map 里面是不允许存在相同 key 值的节点的!因此 erase 函数的返回值要么是 0 要么是 1。

void erase(iterator pos)

删除 pos 位置的节点,pos 是 map 的迭代器哈!

void erase(iterator first, iterator last)

这个函数是删除 map 中一段迭代器区间的所有元素,区间的范围是:[first, last)。

value& operator[] (const key& k)

在 map 的实现中重载了 [] 运算符,可以使用方括号通过 key 值直接拿到 value 值,非常方便。平时在做算法题也会经常用到的。具体的实现逻辑会在模拟实现 map 的那一节细讲,我可以提示一下:是用 insert 来实现的。

#include<iostream>
#include<map>
using namespace std;int main()
{map<int, int> m;m.insert({1,-1});m.insert({2,-2});m.insert({3,-3});m.insert({4,-4});m.insert({5,-5});cout << m[1] << endl; //输出 -1return 0;
}

iterator find(key& k)

这个函数用来在 map 查找是否存在一个 key 值为 k 的节点。如果存在返回该节点对应的迭代器;如果不存在返回 end() 迭代器。

size_t size()

返回 map 中元素的个数!

bool empty()

判断 map 是否为空。

#include<iostream>
#include<map>
using namespace std;int main()
{map<int, int> m;m.insert({1,-1});m.insert({2,-2});m.insert({3,-3});m.insert({4,-4});m.insert({5,-5});cout << (*(m.find(1))).first << " " << (*(m.find(1))).second << endl; //输出 1 -1cout << m.size() << endl; //输出 5cout << m.empty() << endl; //输出:0,表示 map 不为空return 0;
}

在这里插入图片描述

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

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

相关文章

P2824 [HEOI2016/TJOI2016] 排序

P2824 [HEOI2016/TJOI2016] 排序 [HEOI2016/TJOI2016] 排序 题目描述 在 2016 2016 2016 年&#xff0c;佳媛姐姐喜欢上了数字序列。因而她经常研究关于序列的一些奇奇怪怪的问题&#xff0c;现在她在研究一个难题&#xff0c;需要你来帮助她。 这个难题是这样子的&#x…

linux 创建git项目并提交到gitee(保姆式教程)

01、git安装与初始化设置 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ apt install mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ git config --global user.name "用户名" mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ git config --global user.ema…

Python自定义函数练习(持续更新中~)

1.计算矩阵的面积和周长&#xff1a; class Rectangle:def __init__(self, width, height):self.width widthself.height heightdef area(self):return self.width * self.heightdef perimeter(self):return 2 * (self.width self.height)if __name__ "__main__"…

深入理解JS中的this

1、浅谈this 1.1、调用位置 在学习this的绑定过程之前&#xff0c;首先要理解调用位置&#xff0c;即函数在代码中被调用的位置&#xff0c;因此我们需要分析调用栈&#xff0c;看以下代码 function baz(){// 当前调用栈是baz// 因此调用位置就是全局作用域console。log(&qu…

财务RPA机器人如何使用

随着科技的不断发展&#xff0c;自动化技术在各个领域得到了广泛应用&#xff0c;在财务领域&#xff0c;RPA机器人已经成为一种新兴的技术手段&#xff0c;帮助众多企业实现了财务流程的自动化&#xff0c;大大提高了工作效率&#xff0c;降低人力成本。 本文将详细介绍财务RP…

AtCoder Beginner Contest 327 G. Many Good Tuple Problems(带标号二分图计数+有区别小球放入有区别盒子)

题目 一个长为n(n<30)的原始序列x&#xff0c;x[i]可以取值0或1 一个长为m(m<1e9)的点对序列(s,t)&#xff0c; s序列第i项和t的第i项&#xff0c;均可以取值[1,n]&#xff0c; 如果构造好s和t后&#xff0c;对任意都存在01序列x使得&#xff0c; 则称这个序列是合法…

【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列

文章目录 一、死信交换机1.1 什么是死信和死信交换机1.2 死信交换机和死信队列的创建方式 二、消息的 TTL2.1 什么是消息的 TTL2.2 基于死信交换机和 TTL 实现消息的延迟 三、基于 DelayExchang 插件实现延迟队列3.1 安装 DelayExchang 插件3.2 DelayExchang 实现消息延迟的原理…

MySQL5.7小版本升级-In-Place方式

在 Centos7.9上升级二进制方式安装的MySQL 。升级方式有就地升级和逻辑升级2种方法&#xff0c;本实验演示In-Place Upgrade就地升级的方式将mysql-5.7.17升级至5.7.44 In-Place Upgrade就地升级Logical Upgrade逻辑升级 升级方式介绍 In-Place Upgrade就地升级 In-Place U…

perl列表创建、追加、删除

简介 perl 列表追加元素 主要是通过push和unshift函数来实现。其中&#xff0c;push是追加到列表尾&#xff0c;unshift是追加到列表头。 perl列表删除元素 主要是通过pop和shift函数来实现。其中&#xff0c;pop是从列表尾删除一个元素&#xff0c; shift是从列表头删除一…

6大场景,玩转ChatGPT!

文章目录 一、故事叙述提问举例 二、产品描述提问举例 三、报告撰写提问举例 四、邮件和信件撰写提问举例 五、新间稿和公告撰写提问举例 六、学术论文和专业文章撰写提问举例 本文是在GPT3.5版本下演示的 我们知道AI技术不仅能够自动生成文章和内容&#xff0c;还可以根据我们…

【大数据】NiFi 中的重要术语

NiFi 中的重要术语 1.Flow Controller2.Processor3.Connection4.Controller Service5.Process Group6.FlowFile 那些一个个黑匣子称为 Processor&#xff0c;它们通过称为 Connection 的队列交换名为 FlowFile 的信息块。最后&#xff0c;FlowFile Controller 负责管理这些组件…

软考高级系统架构设计师系列之:软考高级系统架构设计师论文专题

软考高级系统架构设计师系列之:软考高级系统架构设计师论文专题 一、论文相关内容二、论文专题大纲三、论文考试方式四、历年真题汇总分析五、论文常见问题六、论文评分标准七、搭建论文万能模版八、论文万能模版公式九、搭建论文万能模版—摘要十、搭建论文万能模版—背景十一…

XSAN数据恢复-存储空间架构迁移时误格式化存储系统的XSAN数据恢复案例

XSAN数据恢复环境&#xff1a; 昆腾存储&#xff0c;MAC OS操作系统&#xff0c;存放视频类数据&#xff08;MXF、MOV等格式文件&#xff09;。 XSAN故障&检测&#xff1a; 将存储空间从XSAN架构迁移到STORNEXT架构后&#xff0c;存储空间中数据全部丢失。 故障存储中一共…

Oracle常用运维SQL-SQL执行性能及锁表等查询分析

oracle相关系列文章: docker–在Anaconda jupyter 容器中使用oracle数据源时,Oracle客户端安装配置及使用示例 Oracle常用运维SQL–用户管理、数据导入、导出的实用脚本 Oracle TEMPORARY TABLE 临时表的使用及删除报ORA-14452错误的解决办法 Oracle常用运维SQL-SQL执行性能及…

R 复习 菜鸟教程

R语言老师说R好就业&#xff0c;学就完了 基础语法 cat()可以拼接函数&#xff1a; > cat(1, "加", 1, "等于", 2, \n) 1 加 1 等于 2sink()&#xff1a;重定向 sink("r_test.txt", splitTRUE) # 控制台同样输出 for (i in 1:5) print(i…

蓝桥杯官网填空题(方格计数)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 如下图所示&#xff0c;在二维平面上有无数个 11 的小方格。 我们以某个小方格的一个顶点为圆心画一个半径为 50000 的圆。 你能计算出这个圆里有多少个完整的小方…

【星海出品】VUE(五)

表单 表单输入绑定 只需要v-model声明一下这个变量就可以。 还可以选择不同的类型&#xff0c;例如 type"checkbox“ v-model 也提供了 lazy、number、.trim 功能&#xff0c;只需要在v-model后面加入.lazy 例如&#xff1a;v-model.lazy”message“ <template><…

Azure 机器学习 - 设置 AutoML 训练时序预测模型

目录 一、环境准备二、训练和验证数据三、配置试验支持的模型配置设置特征化步骤自定义特征化 四、可选配置频率和目标数据聚合启用深度学习目标滚动窗口聚合短时序处理非稳定时序检测和处理 五、运行试验六、用最佳模型进行预测用滚动预测评估模型精度预测未来 七、大规模预测…

Flink源码解析八之任务调度和负载均衡

源码概览 jobmanager scheduler:这部分与 Flink 的任务调度有关。 CoLocationConstraint:这是一个约束类,用于确保某些算子的不同子任务在同一个 TaskManager 上运行。这通常用于状态共享或算子链的情况。CoLocationGroup & CoLocationGroupImpl:这些与 CoLocationCon…

css主题切换

html <!DOCTYPE html> <html> <head><title>主题切换示例</title> </head> <body><div class"app"><button id"themeButton">切换主题</button><div class"content"><h1…