map按照value排序

map中的记录按照value排序

map默认是按key值从小到大排序的,要改为按value排序。
基本思路就是:想直接用sort排序是做不到的,sort只支持数组、vector等的排序。
所以可以先把map装进pair里,然后再放入vector,自定义sort实现排序。

#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;

map<int, int> myMap;
map<int, int>::iterator map_iter;//map迭代器

vector<pair<int, int>> vec;
vector<pair<int, int>>::iterator vec_iter;//vector迭代器 

bool cmp(pair<int, int> a, pair<int, int> b)
{
    //'<'按照value从小到大排,'>'是从大到小 
    return a.second < b.second;
}

int main()
{
    myMap[0] = 888888;
    myMap[1] = 11;
    myMap[2] = 2222;
    myMap[3] = 333;
    myMap[4] = 4;

    
    for(map_iter=myMap.begin(); map_iter!=myMap.end(); map_iter++)
    {
        //将map中记录push到vector中 
        vec.push_back(pair<int, int> (map_iter->first, map_iter->second));
        
        //输出默认序列(按key默认排序) 
        cout<<map_iter->first<<"  "<<map_iter->second<<endl;
    }
    
    puts("-----------------排序后----------------");
    
    sort(vec.begin(), vec.end(), cmp);//按照cmp中要求排序 
    
    for(vec_iter=vec.begin(); vec_iter!=vec.end(); vec_iter++)
    {
        //输出按value排序后的序列
        cout<<vec_iter->first<<"  "<<vec_iter->second<<endl;
    }
    return 0;
}

输出结果:

 

C++11

posted @ 2020-04-28 21:36  程序虫  阅读(4601)  评论(0编辑  收藏  举报