map的定义
map<typename1,typename2> mp;
map<int,int> mp;
map<string,int> mp;
map<set<int>,string> mp;
map需要确定映射前类型(键key)和映射后类型(值 value) <>内填写两个类型,其中第一个键的类型,第二个是值的类型,
如果是字符串到整形的映射,必须使用string而不用char数组类型
map容器的内元素的访问
通过下标访问
和访问普通数组一样,例如对一个定义为map<char,int> mp的map来说,就可以直接使用mp[‘c’]的方式来访问它对应的整数,map中的键值是唯一的
map<char,int> mp;
mp['c']=1;
mp['c']=2;//1被覆盖
cout<<mp['c']<<endl;//2;
通过迭代器返回
map<typename1,typename2>::iterator it;
map可以使用it->first来访问键,使用it->second来访问值
map内部是由红黑树实现的
map会以键从小到大的顺序自动排序
insert() 添加一个新的pair到map中
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
mp.insert(pair<char,int>('d',4));
map<char,int>::iterator it;
mp.size();
for(it=mp.begin();it!=mp.end();it++){
cout<<it->first<<" "<<it->second<<endl;
}
//a 1
//b 2
//c 3
//d 4
find()
find(key) 返回键值为key的映射迭代器
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
map<char,int>::iterator it;
it=mp.find('a');
cout<<it->first<<" "<<it->second<<endl; //a 1
查找一个元素是否出现在map中
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
map<char,int>::iterator it;
it=mp.find('a');
if(it!=mp.end()){
//存在
cout<<"存在"<<endl;
}
else{
cout<<"不存在"<<endl;
}
it=mp.find('d');
if(it!=mp.end()){
//不存在
cout<<"存在"<<endl;
}
else{
cout<<"不存在"<<endl;
}
count(key) 返回某个键值的数量
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
mp['c']=4;//会覆盖前面的mp['c']的值
cout<<mp.count('c')<<endl; //1
empty()
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
cout<<mp.empty()<<endl;//0
erase()
erase()有两种用法 删除单个元素,删除一个区间内的所有元素
mp.erase(it) it为所需要删除元素的迭代器
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
map<char,int>::iterator it;
it=mp.find('a');
mp.erase(it);
for(it=mp.begin();it!=mp.end();it++){
cout<<it->first<<" "<<it->second<<endl; //b 2 c 3
}
mp.erase(key) key为欲删除的映射的键
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
map<char,int>::iterator it;
mp.erase('b');
for(it=mp.begin();it!=mp.end();it++){
cout<<it->first<<" "<<it->second<<endl;
}
mp.erase 删除一个区间内的所有元素
mp.erase(first,last) 其中first为需要删除的区间的起始迭代器,而last则为所需要删除的区间的末尾迭代器的下一个地址,也即为删除左闭右开的区间
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
mp['d']=4;
mp['e']=5;
map<char,int>::iterator it;
it=mp.find('b');
mp.erase(it,mp.end());
for(it=mp.begin();it!=mp.end();it++){
cout<<it->first<<" "<<it->second<<endl; //a 1
}
clear()清空map集合中的所有元素
size()获得map中映射的对数
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
mp['d']=4;
mp['e']=5;
map<char,int>::iterator it;
mp.size();
for(it=mp.begin();it!=mp.end();it++){
cout<<it->first<<" "<<it->second<<endl;
}
mp.clear();
cout<<mp.size()<<endl;//0