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 方法则不会(插入失败).
==========================================================================================================================
STL——容器(Map & multimap)的插入与迭代器
原文:https://www.cnblogs.com/CooCoChoco/p/13127237.html