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.hqwc.cn/news/161619.html

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

相关文章

R语言 PPT 预习+复习

什么狗吧发明的结业考&#xff0c;站出来和我对线 第一章 绪论 吊码没有&#xff0c;就算考R语言特点我也不背&#xff0c;问就是叫么这没用。 第二章 R语言入门 x<-1:20 赋值语句 x 1到20在x上添加均值为0、标准差为2的正态分布噪声 y <- x rnorm (20, 0, 2) 这…

线程的创建、等待、退出

多线程开发在Linux平台上已经有成熟的pthread库支持&#xff0c;所以使用pthread库在编译时要加上-pthread。其设计的多线程开发的基本概念主要包含3点&#xff1a;线程、互斥锁、条件。其中线程操作又分线程的创建、退出、等待三种。互斥锁包含4种操作&#xff0c;分别是创建、…

python基础速通

1. 梳理&#xff1a;目前学习了哪几种数据类型&#xff0c; 每一个数据类型定义一个变量&#xff0c;并输出内容以及类型 # 数据类型 # 整型 int_data 1 print(int_data, type(int_data)) # 浮点型 float_data 1.2 print((float_data, type(float_data))) # 复数 complex_da…

java高级之单元测试、反射

1、Junit测试工具 Test定义测试方法 1.被BeforeClass标记的方法,执行在所有方法之前 2.被AfterCalss标记的方法&#xff0c;执行在所有方法之后 3.被Before标记的方法&#xff0c;执行在每一个Test方法之前 4.被After标记的方法&#xff0c;执行在每一个Test方法之后 public …

什么情况造成互斥锁死锁

由于互斥锁的使用不当&#xff0c;导致多个线程无法进行下一步的代码运行&#xff0c;也就是说竞争锁的两个线程互相锁住&#xff0c;导致整个进程无法往下运行。 举个例子&#xff1a; 两个锁&#xff0c;两个线程&#xff0c;两个线程运行的条件都是需要同时获得这两把锁&a…

高防CDN:游戏应用抵御DDoS攻击的坚固堡垒

在当今的数字时代&#xff0c;游戏应用已经成为人们生活的一部分&#xff0c;而面临的网络威胁也日益复杂。其中&#xff0c;DDoS&#xff08;分布式拒绝服务&#xff09;攻击是游戏应用的一项严重威胁&#xff0c;可能导致游戏服务不可用&#xff0c;用户流失&#xff0c;以及…

AI:54-基于深度学习的树木种类识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

Spring AOP 简介

一、Spring AOP AOP 是一种思想&#xff0c;而 Spring AOP 是一个框架&#xff0c;提供了一种对 AOP 思想的实现。 1、什么是 AOP&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;是一种编程思想&#xff0c;表示面向切面编程。指的是对某…

如何快速导出、备份微信通讯录好友联系人微信号

6-9 如果因工作需要&#xff0c;你有多个微信&#xff0c;并且你的业务开发的客户都在这些微信里&#xff0c;将会面临一个问题&#xff0c;那就是备份问题&#xff0c;因为通过微信做业务&#xff0c;如果遇到微信不小心被封号&#xff0c;或者离职的交接等情况&#xff0c;客…

pg14-sql基础(三)-分组

分组 SELECT hire_date, COUNT(*) FROM employees GROUP BY hire_date;SELECT extract(year from hire_date), COUNT(*) FROM employees GROUP BY extract(year from hire_date); -- GROUP BY 1;SELECT extract(year from hire_date), department_id, COUNT(*) FROM employees…

逆向学习记录(3)工具介绍jadx、gda和jeb

1、jadx 下载地址如下&#xff0c;目前最新版本为v1.4.7&#xff0c;改成想要下载的版本号就能下载对应的版本。 https://github.com/skylot/jadx/releases/tag/v1.4.7 下载后解压&#xff0c;进入对应路径的bin文件夹内&#xff0c;运行jadx-gui.bat。 2、gda 下载地址和gi…

抵押贷款巨头 Mr. Cooper 遭受网络攻击,影响 IT 系统

导语 近日&#xff0c;美国抵押贷款巨头 Mr. Cooper 遭受了一次网络攻击&#xff0c;导致该公司的 IT 系统受到影响。这一事件引起了广泛的关注&#xff0c;使得 Mr. Cooper 的在线支付平台无法正常运行。本文将为大家详细介绍这次网络攻击事件的具体情况及其对用户和公司造成的…