C++map如何按值排序

因为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;
}

输出结果如图:

猜你喜欢

转载自blog.csdn.net/qq_18297675/article/details/73521794