C++map如何按值排序

来源:互联网 发布:java中的类命名规范 编辑:程序博客网 时间:2024/06/07 15:36

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

输出结果如图:

原创粉丝点击