C++ map用法总结

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();

猜你喜欢

转载自blog.csdn.net/wenmiao_/article/details/82355321
今日推荐