因为sort函数只能排序类似vector这样的类,map是不能排序的。所以需要将map转换为vector表示,那就需要pair
//map数据按照值来排序
void MapSortOfValue(vector<pair<int,string> >& vec,map<string,int>& m)
{
for (map<string, int>::iterator it = m.begin(); it != m.end(); it++)
vec.push_back(make_pair(it->second, it->first));
sort(vec.begin(), vec.end());
}
sort默认按照first从小到大排序。
例子如下:
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
//map数据按照值来排序
void MapSortOfValue(vector<pair<int,string> >& vec,map<string,int>& m)
{
for (map<string, int>::iterator it = m.begin(); it != m.end(); it++)
vec.push_back(make_pair(it->second, it->first));
sort(vec.begin(), vec.end());
}
int main()
{
vector<pair<int, string> > vec;
map<string, int> m;
m["ABC"] = 4;
m["ACB"] = 2;
m["CDB"] = 5;
m["ADB"] = 1;
cout << "排序前" << endl;
for (map<string, int>::iterator it = m.begin(); it != m.end(); it++)
cout << it->first.c_str() << " " << it->second << endl;
cout << "---------------------" << endl;
MapSortOfValue(vec, m);
cout << "排序后" << endl;
for (vector<pair<int, string> >::iterator it = vec.begin(); it != vec.end(); it++)
cout << it->first << " " << it->second.c_str() << endl;
return 0;
}
输出结果如图: