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)的插入与迭代器的更多相关文章

  1. STL:map/multimap用法详解

    map/multimap 使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理.它们可根据key的排序准则 ...

  2. STL容器 -- Map

    核心描述: map 就是从键(key) 到 值(value) 的一个映射.且键值不可重复,内部按照键值排序. 头文件: #include <map> 拓展: multimap 是一个多重映 ...

  3. STL之map&multimap使用简介

    map 1.insert 第一种:用insert函数插入pair数据 #include <map> #include <string> #include <iostrea ...

  4. STL——容器(Set & multiset)的迭代器

    1.set.insert(elem);     //在容器中插入元素. 2.set.begin();         //返回容器中第一个数据的迭代器. 3.set.end();          / ...

  5. STL容器Map

    Map的常见函数 Map的实现机制 STL中的Map底层实现机制是RB树(红-黑树)

  6. 【STL】-Map/Multimap的用法

    初始化: map<string,double> salaries; 算法: 1. 赋值.salaries[ "Pat" ] = 75000.00; 2. 无效的索引将自 ...

  7. STL - 容器 - Map(二)

    把Map用作关联式数组 MapAdvanceTest.cpp #include <map> #include <string> #include <iostream> ...

  8. STL - 容器 - Map(一)

    MapTest.cpp #include <map> #include <string> #include <iostream> #include <algo ...

  9. iBinary C++STL模板库关联容器之map/multimap

    目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...

  10. STL容器之一vector

    STL中最简单也是最有用的容器之一是vector<T>类模板,称为向量容器,是序列类型容器中的一种. 1.vector<T> 对象的基本用法(1)声明:vector<ty ...

随机推荐

  1. 利用s3-test进行ceph的接口兼容性测试

    前言 ceph的rgw能够提供一个兼容性的s3的接口,既然是兼容性,当然不可能是所有接口都会兼容,那么我们需要有一个工具来进行接口的验证以及测试,这个在其他测试工具里面有类似的posix接口验证工具, ...

  2. ubuntu服务器启动过程中重启卡死的问题解决

    在grub默认参数当中添加 GRUB_RECORDFAIL_TIMEOUT=0 写于: 2014年07月23日 更新于: 2015年03月24日

  3. 有关线上系统点击没有任何相应得问题思考,主要针对PC端应用程序

    1.问题得起因 前段时间,客户得某些机器上,点击应用系统得快捷方式,没有任何响应,不弹出程序主界面,也没有任何得报错提示,甚至程序得错误日志也没有任何输出. 当时,听说发生这种情况得时候,有点懵了,不 ...

  4. SQL Server 批量生成数据库内多个表的表结构

    在遇到大型数据库的时候,一个数据库内存在大量的数据表,如果要生成多个表的表结构,一个表的检索,然后右键Create出来,太麻烦了. 下面我介绍下批量选择并生成多个表的表结构快捷方式,仅供参考. 第一步 ...

  5. Java Web 会话技术总结

    会话技术 会话概念 一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止,一次会话结束. 会话的功能 在一次会话的范围内的多次请求间,共享数据. 会 ...

  6. 如何使用会声会影制作动态logo字幕

    日常生活中大家在参加一些婚礼.聚会的时候,LED屏幕上播放的视频里面常常会有一行字,它随着视频的播放自己也在不断地改变颜色,非常醒目.想必大家也想把这种动态文字用在自己的视频中,为视频增添亮点.那么今 ...

  7. 轻松将CAD文件转为加密的PDF文件

    对于从事设计相关工作的朋友来说,CAD肯定再熟悉不过了.一些有特殊要求的CAD文件,需要将其转换成为PDF文件以方便保存.传输.打印,同时还得保证设计图稿的安全性,所以将CAD文件直接转为加密的PDF ...

  8. 工作中用到的redis操作

    del exists 1.字符串 set,get 2.列表 lRange lRem lPush rPush 3.有序列表 zadd zrem zscore 4.hash hset hget hdel

  9. windows安装redis扩展

    Thread Safety enabled 打开phpinfo() 看php版本是ts还是nts,  如上是ts版本的,所以需要安装redis的ts版本, redis的扩展下载地址 https://p ...

  10. lca(lowestCommonAncestor)