map按照value的值排序输出
map内部是由红黑树构成的(虽然不懂啥是红黑树),其顺序是固定的,即按照key的大小排序存放。因此直接进行排序是不现实的,故借助vector进行排序。
其核心是,将map转为vector存储其内部的每组pair,然后对vector进行排序即可。
代码如下:
bool cmp(const pair<string,int> &a,const pair<string,int> &b)
{
if(a.second>b.second)
return true;
else
return false;
}
int main()
{
map<string,int>m;
m.insert(pair<string,int>("asdasd",12));
m["adas"]=45;
m["aaaa"] = 1;
m["ssss"] = 44;
m["wewew"] = 45;
vector<pair<string,int> >v(m.begin(),m.end());
sort(v.begin(),v.end(),cmp);
for(int i=0;i<v.size();i++)
cout<<v[i].first<<" " <<v[i].second<<endl;
cout<<endl;
}
输出结果:
cmp函数中,形参必须是常量,且是pair的引用,这里我没明白为什么必须这样做,故恳请大佬指教。