【C++】map容器的用法
检测map容器是否为空:
1 #include <iostream>
2 #include<map>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 //检测容器是否为空
8 map<string, string>mapText;
9 if (mapText.empty())
10 {
11 cout << "mapText为空" << endl;
12 }
13 else
14 {
15 cout << "mapText不为空" << endl;
16 }
17
18 //向容器中添加元素
19 mapText["小A"] = "A"; //赋值
20 mapText["小B"] = "B"; //赋值
21 mapText["小C"] = "C"; //赋值
22
23 if (mapText.empty())
24 {
25 cout << "mapText为空" << endl;
26 }
27 else
28 {
29 cout << "mapText不为空" << endl;
30 }
31
32 system("pause");
33 return 0;
34 }

重复赋值,值被替换:
1 #include <iostream>
2 #include<map>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 map<string, string>mapText;
8 mapText["小A"] = "A"; //赋值
9 mapText["小A"] = "B"; //重复赋值
10 cout << mapText["小A"] << endl;
11
12 system("pause");
13 return 0;
14 }

判断键是否存在,如果不存在再赋值:
1 #include <iostream>
2 #include<map>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 map<string, string>mapText;
8 mapText["小A"] = "A"; //赋值
9 //先检测键是否存在,如果存在则不赋值
10 if (mapText.count("小A") == 0) //count==0不存在 count==1存在
11 {
12 mapText["小A"] = "B"; //重复赋值
13 }
14 cout << mapText["小A"] << endl;
15
16 system("pause");
17 return 0;
18 }

map循环遍历:
map.begin()指向map的第一个元素
map.end()指向map的最后一个元素之后的地址
1 #include <iostream>
2 #include<map>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 map<string, string>mapText;
8 mapText["小A"] = "A"; //赋值
9 mapText["小B"] = "B"; //赋值
10 mapText["小C1"] = "C"; //赋值
11 mapText["小C2"] = "C"; //赋值
12 for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
13 {
14 cout << "key = " << itor->first << ", value = " << itor->second << endl;
15
16 }
17 system("pause");
18 return 0;
19 }

map 通过“键”删除键值对:
1 #include <iostream>
2 #include<map>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 map<string, string>mapText;
8 mapText["小A"] = "A"; //赋值
9 mapText["小B"] = "B"; //赋值
10 mapText["小C1"] = "C"; //赋值
11 mapText["小C2"] = "C"; //赋值
12 cout << "删除前:" << endl;
13 for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
14 {
15 cout << "key = " << itor->first << ", value = " << itor->second << endl;
16
17 }
18 //删除小B
19 mapText.erase("小B");
20 cout << "删除后:" << endl;
21 for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
22 {
23 cout << "key = " << itor->first << ", value = " << itor->second << endl;
24
25 }
26 mapText.erase("小B"); //小B不存在,erase也不会报错
27 system("pause");
28 return 0;
29 }

map 通过“值”删除键值对,先写一个错误用法,这里要注意:
1 #include <iostream>
2 #include<map>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 map<string, string>mapText;
8 mapText["小A"] = "A"; //赋值
9 mapText["小B"] = "B"; //赋值
10 mapText["小C1"] = "C"; //赋值
11 mapText["小C2"] = "C"; //赋值
12 cout << "删除前:" << endl;
13 for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
14 {
15 cout << "key = " << itor->first << ", value = " << itor->second << endl;
16
17 }
18 //删除值为C的元素
19 //错误用法:
20 for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
21 {
22 if ((itor->second) == "C")
23 {
24 mapText.erase(itor);
25 }
26 }
27
28 cout << "删除后:" << endl;
29 for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
30 {
31 cout << "key = " << itor->first << ", value = " << itor->second << endl;
32
33 }
34 system("pause");
35 return 0;
36 }
错误原因:itor指针在元素被删除后失效了,回到for语句中与mapText.end()进行比较出现错误。
map 通过“值”删除键值对,正确的用法:
1 #include <iostream>
2 #include<map>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 map<string, string>mapText;
8 mapText["小A"] = "A"; //赋值
9 mapText["小B"] = "B"; //赋值
10 mapText["小C1"] = "C"; //赋值
11 mapText["小C2"] = "C"; //赋值
12 cout << "删除前:" << endl;
13 for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
14 {
15 cout << "key = " << itor->first << ", value = " << itor->second << endl;
16
17 }
18 //删除值为C的元素
19 //正确用法:
20 for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); /*++itor*/)
21 {
22 if ((itor->second) == "C")
23 {
24 itor = mapText.erase(itor);
25 }
26 else
27 {
28 ++itor;
29 }
30 }
31
32
33 cout << "删除后:" << endl;
34 for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
35 {
36 cout << "key = " << itor->first << ", value = " << itor->second << endl;
37
38 }
39 system("pause");
40 return 0;
41 }

删除map的第一个元素
mapText.erase(mapText.begin());
【C++】map容器的用法的更多相关文章
- 蓝桥杯 算法提高 9-3摩尔斯电码 _c++ Map容器用法
//****|*|*-**|*-**|--- #include <iostream> #include <map> #include <vector> #inclu ...
- 详解C++ STL map 容器
详解C++ STL map 容器 本篇随笔简单讲解一下\(C++STL\)中的\(map\)容器的使用方法和使用技巧. map容器的概念 \(map\)的英语释义是"地图",但\( ...
- map的详细用法
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...
- stl之map容器的原理及应用
容器的数据结构同样是采用红黑树进行管理,插入的元素健位不允许重复,所使用的节点元素的比较函数,只对元素的健值进行比较,元素的各项数据可通过健值检索出来.map容器是一种关联容器,实现了SortedAs ...
- STL——map/unordered_map基础用法
map /multimap map是STL里重要容器之一. 它的特性总结来讲就是:所有元素都会根据元素的键值key自动排序(也可根据自定义的仿函数进行自定义排序),其中的每个元素都是<key, ...
- map的详细用法 (转
map的详细用法: map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能 力,由于这个特性,它完成有可能在我 ...
- C++ STL 中 map 容器
C++ STL 中 map 容器 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它 ...
- map的常见用法
map的常见用法 map 是什么? map是一组键值对的组合,通俗理解类似一种特殊的数组,a[key]=val,只不过数组元素的下标是任意一种类型,而且数组的元素的值也是任意一种类型.有点类似pyth ...
- map 容器的使用
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明 1 头文件 #include <map> ...
随机推荐
- <JVM中篇:字节码与类的加载篇>03-类的加载过程(类的生命周期)详解
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- 【python】Leetcode每日一题-存在重复元素3
[python]Leetcode每日一题-存在重复元素3 [题目描述] 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] ...
- 【maven】Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.3:site (default-site)
问题描述 site一点击就报错,如下 Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.3:site (defau ...
- PSP初体验:求交点
项目 内容 课程:北航2020春软件工程 博客园班级博客 作业:完成一个平面图形求交点的程序,体验PSP的过程 个人项目作业 我在这个课程的目标是 体验软件开发的全流程 这个作业在哪个具体方面帮助我实 ...
- Fiddler抓包工具使用记录
前言 Fiddler是一款强大的Web调试代理工具,又称抓包软件,本文记录如何使用Flidder进行抓包 Fiddler官网:https://www.telerik.com/fiddler 下载安装 ...
- 常用加密算法学习总结之数字证书与TLS/SSL
数字证书 对于一个安全的通信,应该有以下特征: 完整性:消息在传输过程中未被篡改 身份验证:确认消息发送者的身份 不可否认:消息的发送者无法否认自己发送了信息 显然,数字签名和消息认证码是不符合要求的 ...
- [DB] MySQL 索引分类
按数据结构 B树索引 数据位于叶子节点,到任何一个叶子节点的距离相同,一般不超过3-4层 B+树索引:每个叶子节点除了数据还存放前后叶子节点的指针,方便快速检索,是InnoDB采用的索引结构 Hash ...
- 【BIGDATA】ElasticSearch HEAD插件的GET请求的坑
今使用HEAD插件,发现复杂查询功能下,使用GET请求有坑. 查询语句如下: GET kk/_search { "query": { "match": { &q ...
- -bash: ll: 未找到命令
第一步将alias ll='ls -l'添加到/etc/profile # head /etc/profile# /etc/profilealias ll='ls -l'# System wide e ...
- 9.13-15 runlevel & init & service
runlevel:输出当前运行级别 runlevel命令用于输出当前Linux系统的运行级别. -quiet 不输出结果,用于通过返回值判断的场合 [root@cs6 ~]# runlevel N 3 ...