浅谈c++中map插入数据的用法
map:数据的插入
在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数据的方法:
第一种:用insert函数插入pair数据
map<int, string> mapStudent; mapStudent.insert(pair<int, string>(1,“student_one”));
第二种:用insert函数插入value_type数据
map<int, string> mapStudent; mapStudent.insert(map<int, string>::value_type (1,"student_one"));
第三种:用make_pair
mapStudent.insert(make_pair(1, "student_one"));
第三种:用数组方式插入数据
注意:[]与at的区别
在C ++ 11中map::at
存在:如果该键不存在则抛出异常,如果该元素不存在则find
返回aMap.end();
如果没有值存在,则为相应键值operator[]
初始化一个新值。
所以最好用:索引操作符[]
进行设置和.find()
/ .at()
查找
map<int, string> mapStudent; mapStudent[1] = “student_one”; mapStudent[2] = “student_two”;
/* 如果是 #include <map> map<string, int> mapStudent; string s; 插入就用m[s]++; */
以上四种用法,虽然都可以实现数据的插入,但是它们是有区别的,当然了第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是不能再插入这个数据的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值,即:如果当前存在该关键字,则覆盖改关键字的值,否则,以改关键字新建一个key—value;
最后记录下map用lambda表达式for_ecah遍历时的一个小问题
#include <iostream> #include <map> #include <algorithm> using namespace std; int main() { map<int ,string> m; m.insert(pair<int,string>(1,"a")); m.insert(make_pair(2,"b")); m.insert(map<int,string>::value_type (3,"c")); m.insert(pair<int,string>(4,"d")); for_each(m.cbegin(),m.cend(),[](const pair<int,string> &it) { cout<<"first:"<<it.first<<" second:"<<it.second<<endl; }); return 0; }
lambda中的参数列表要写成pair类型,以为map返回的是一对数据,是pair型的,不可只用map<int,string>::iterator it 迭代器来遍历。
posted on 2018-05-09 22:46 tianzeng 阅读(65575) 评论(0) 编辑 收藏 举报