map是一对一关系
以map<int,string>为例,有map<int,string>::iterator iter;
iter->first为key,iter->second为val
1.初始化
- map<int,string> m;
- m[key]=val;
- m.insert({key,val});//还有其他若干insert,但第一种直接赋值方法足矣
2.查找
iter = m.find("r123");
if(iter!=m.end())
cout<<"Find, the value is"<<iter->second<<endl;
else
cout<<"Not Find"<<endl;
3.删除
map<int,string>::iterator iter=m.find(key);
m.erase(iter);
m.clear();
m.erase(m.begin(),m.end());
int n=m.erase(key);//删了返回1,否则返回0
4.遍历
-
map<int,string>::iterator iter; for(iter=m.begin();iter!=m.end();++iter) { cout<<iter->first<<endl; }
反向遍历
for(map<int,char>::reverse_iterator rit=m.rbegin();rit!=m.rend();rit++)
cout<<(*rit).first<<" "<<(*rit).second<<endl;
5.排序
map按key升序排序
- 按val排序
map<int,int> m;
m[3]=4;
m[2]=3;
m[5]=3;
m[1]=1;
m[4]=1;
for(map<int,int>::iterator iter=m.begin();iter!=m.end();++iter)
{
cout<<iter->first<<" "<<iter->second<<endl;
}
map<int,map<int,int> > mm;
for(map<int,int>::iterator iter=m.begin();iter!=m.end();++iter)
{
mm[iter->second][iter->first]=iter->second;
}
for(map<int,map<int,int> >::reverse_iterator iter=mm.rbegin();iter!=mm.rend();++iter)
{
for(map<int,int>::iterator ite=iter->second.begin();ite!=iter->second.end();++ite)
{
cout<<ite->first<<" "<<ite->second<<endl;
}
}
6.其他
- m.count(key);//若有此key,返回1,无,返回0
- m.lower_bound(key);
- m.upper_bound(key);//这两个就比较坑了,lower_bound()是返回键值>=给定元素的第一个位置,upper_bound()是返回键值>给定元素的第一个位置
- m.size();