STL——容器(Map & multimap)的插入与迭代器
1. 容器(Map & multimap)的插入
map.insert(...); //往容器插入元素,返回pair<iterator,bool>
map中插入元素的四种方式:
1 #include <iostream>
2 #include <map>
3
4 using namespace std;
5
6 int main()
7 {
8 map<int, string> mapStu;
9
10 //方法一: 构造一个 pair 然后插入
11 mapStu.insert(pair<int, string>(1, "内容A"));
12
13 //方法二: 使用 make_pair
14 mapStu.insert(make_pair(2, "内容B"));
15
16 //方法三: 使用 value_type, 相当于 pair<int,string>
17 mapStu.insert(map<int, string>::value_type(3, "内容C"));
18
19 //方法四: 使用下标插入,这种方法非常直观,但碰到相同的 key 时会进行覆盖操作
20 mapStu[4] = "内容D";
21
22 //只要创建了 key ,这种情况会构造创建内存,生成 string 的默认空值,创建完右值后,拷贝给左值
23 mapStu[6] = mapStu[5];
24
25 //将 key 为4的内容拷贝至7
26 mapStu[7] = mapStu[4];
27
28 for (map<int, string>::iterator it = mapStu.begin(); it != mapStu.end(); it++)
29 {
30 cout << "key: " << (*it).first << " value: " << (*it).second << endl;
31 }
32
33 return 0;
34 }
打印结果:

1. 前三种方法,采用的是insert()方法,该方法返回值为pair<iterator, bool>
2. 第四种方法非常直观,但碰到相同的键时会进行覆盖操作。比如插入key 为4的键值时,先在mapStu中查找主键为4的项,若不存在,则将一个键为4,值为默认初始化值的对组插入到 mapStu 中,然后再将值修改成“内容D”。若发现已存在4这个键,则修改这个键对应的value。
3. string strName = mapStu[8]; //取值操作或插入操作
4. 只有当mapStu存在8这个键时才是正确的取操作,否则会自动插入一个实例,键为8,值为默认构造时的初始化值。
5. 在 key 值存在的情况下, 只有通过下标方式可以覆盖修改 key 对应的value (插入成功), 通过 insert 方法则不会(插入失败).
2. 使用 insert 插入返回 pair<iterator,bool>
下边例子用返回的打印判断插入是否成功:
1 #include <iostream>
2 #include <map>
3
4 using namespace std;
5
6 int main()
7 {
8 map<int, string> mapStu;
9
10 //方法一: 构造一个 pair 然后插入,
11 pair <map<int, string>::iterator, bool> ret_1 = mapStu.insert(pair<int, string>(1, "内容A"));
12 if (ret_1.second == true)
13 {
14 cout << "插入" << (*(ret_1.first)).second<< "成功" << endl;
15 }
16 else
17 {
18 cout << "插入" << "内容A新" << "失败" << endl;
19 }
20 pair <map<int, string>::iterator, bool> ret_2 = mapStu.insert(pair<int, string>(1, "内容A新"));
21 if (ret_2.second == true)
22 {
23 cout << "插入" << (*(ret_2.first)).second << "成功" << endl;
24 }
25 else
26 {
27 cout << "插入" << "内容A新" << "失败" << endl;
28 }
29
30 //方法二: 使用 make_pair
31 pair <map<int, string>::iterator, bool> ret_3 = mapStu.insert(make_pair(2, "内容B"));
32 if (ret_3.second == true)
33 {
34 cout << "插入" << (*(ret_3.first)).second << "成功" << endl;
35 }
36 else
37 {
38 cout << "插入" << "内容B新" << "失败" << endl;
39 }
40 pair <map<int, string>::iterator, bool> ret_4 = mapStu.insert(make_pair(2, "内容B新"));
41 if (ret_4.second == true)
42 {
43 cout << "插入" << (*(ret_4.first)).second << "成功" << endl;
44 }
45 else
46 {
47 cout << "插入" << "内容B新" << "失败" << endl;
48 }
49
50 //方法三: 使用 value_type, 相当于 pair<int,string>
51 pair<map<int, string>::iterator, bool> ret_5 = mapStu.insert(map<int, string>::value_type(3, "内容C"));
52 if (ret_5.second == true)
53 {
54 cout << "插入" << (*(ret_5.first)).second << "成功" << endl;
55 }
56 else
57 {
58 cout << "插入" << "内容C新" << "失败" << endl;
59 }
60 pair<map<int, string>::iterator, bool> ret_6 = mapStu.insert(map<int, string>::value_type(3, "内容C新"));
61 if (ret_6.second == true)
62 {
63 cout << "插入" << (*(ret_6.first)).second << "成功" << endl;
64 }
65 else
66 {
67 cout << "插入" << "内容C新" << "失败" << endl;
68 }
69
70 for (map<int, string>::iterator it = mapStu.begin(); it != mapStu.end(); it++)
71 {
72 cout << "key: " << (*it).first << " value: " << (*it).second << endl;
73 }
74
75 return 0;
76 }
打印结果:

3. 容器(Map & multimap)的迭代器
² map.begin(); //返回容器中第一个数据的迭代器。
² map.end(); //返回容器中最后一个数据之后的迭代器。
² map.rbegin(); //返回容器中倒数第一个元素的迭代器。
² map.rend(); //返回容器中倒数最后一个元素的后面的迭代器。
==========================================================================================================================
STL——容器(Map & multimap)的插入与迭代器的更多相关文章
- STL:map/multimap用法详解
map/multimap 使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理.它们可根据key的排序准则 ...
- STL容器 -- Map
核心描述: map 就是从键(key) 到 值(value) 的一个映射.且键值不可重复,内部按照键值排序. 头文件: #include <map> 拓展: multimap 是一个多重映 ...
- STL之map&multimap使用简介
map 1.insert 第一种:用insert函数插入pair数据 #include <map> #include <string> #include <iostrea ...
- STL——容器(Set & multiset)的迭代器
1.set.insert(elem); //在容器中插入元素. 2.set.begin(); //返回容器中第一个数据的迭代器. 3.set.end(); / ...
- STL容器Map
Map的常见函数 Map的实现机制 STL中的Map底层实现机制是RB树(红-黑树)
- 【STL】-Map/Multimap的用法
初始化: map<string,double> salaries; 算法: 1. 赋值.salaries[ "Pat" ] = 75000.00; 2. 无效的索引将自 ...
- STL - 容器 - Map(二)
把Map用作关联式数组 MapAdvanceTest.cpp #include <map> #include <string> #include <iostream> ...
- STL - 容器 - Map(一)
MapTest.cpp #include <map> #include <string> #include <iostream> #include <algo ...
- iBinary C++STL模板库关联容器之map/multimap
目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...
- STL容器之一vector
STL中最简单也是最有用的容器之一是vector<T>类模板,称为向量容器,是序列类型容器中的一种. 1.vector<T> 对象的基本用法(1)声明:vector<ty ...
随机推荐
- 西数WD2T硬盘分区对齐的方法
新购一个西数2T硬盘,也就是绿盘的那种,淘宝500左右,支持高级格式化. 到手以后,分区格式化,前几天格式化完成以后,fdisk -l 发现如下文字 引用 Partition 1 does not s ...
- Java并发编程 - Runnbale、Future、Callable 你不知道的那点事(一)
从事Java开发已经快两年了,都说Java并发编程比较难,比较重要,关键面试必问,但是在我的日常开发过程中,还真的没有过多的用到过并发编程:这不疫情嘛,周末不能瞎逛,就看看师傅们常说的 Runnabl ...
- 搭建zookeeper集群(伪集群)
jdk环境 上传zk压缩包 解压缩 复制三份 mkdir /usr/local/zk_cluster cp -r zookeeper-3.4.6 /usr/local/zk_cluster/zooke ...
- 好学易懂 从零开始的插头DP(一)
好学易懂 从零开始的插头DP(一) 写在前面 这是一篇,以蒟蒻视角展开的梳理总结.更改了一些顺序,变化了一些细节.方便蒟蒻学习理解(起码本蒟蒻是这样).大佬们可以直接看其它大佬的博客,可以学的更快. ...
- Single Depth peeling 顺序无关渲染(OIT)
什么是顺序无关渲染 在3D渲染中,物体的渲染是按一定的顺序渲染的,这也就可能导致半透明的物体先于不透明的物体渲染,结果就是可能出现半透明物体后的物体由于深度遮挡而没有渲染出来.对于这种情况通常会先渲染 ...
- PHP中的变量覆盖漏洞
简介 今天利用周六整理了一下 php覆盖的漏洞 榆林学院的同学可以使用协会内部实验平台进行实验操作. 1.extract()变量覆盖 1.extract() extract() 函数从数组中将变量导入 ...
- SHEIN:Java开发面经
SHEIN面经 我觉得除技术外,自信是一个非常关键的点. 一面 自我介绍: 谈谈实习经历: 讲讲你实习的收获: 如何设计规范的接口?(简历上有写,所以问到) 当你需要修改两个月前的代码时,如何去整理以 ...
- guitar pro系列教程(二):Guitar Pro主界面之记谱功能的详细解析【下】
本章节我们接着上一章节继续讲解关于guitar pro主界面的记谱功能里的符号功能.有兴趣的朋友可以进来一起学习哦. 首先我们看下图,这是点击按钮便会弹出的一个窗口,进入这个窗口,我们会看到" ...
- ubuntu解决安装速度问题
速度慢得原因:linux系统很多的软件源链接都是在国外服务器上,由于国内防火墙影响导致下载速度极慢,甚至超时. 解决办法一:购买梯子 这样你就可以快速的下载国外服务器的软件包了,但是你得有个可靠得梯子 ...
- Java集合【7】--List接口超级详细解析
目录 1.List接口的特性 2.List接口的源码解析 3.相关子类介绍 3.1 ArrayList 3.1.1 成员变量 3.1.2 构造方法 3.1.3 常用增删改查方法 添加元素 查询元素 更 ...