map按照value值排序


map可以實現key到value的一一映射,如果是一對多的,我們可以使用multimap

multimap<int,int>mp;

mp.insert(make_pair(first,second));

map默認是按照key值從小到大進行排序的,如果希望按照從大到小進行排序,可以使用

map<int,int,greater<int> >mp

如果我們期望按照自己定義的規則進行排序,那么可以自己寫一個排序類

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
struct cmp
{
    bool operator()(const string &k1,const string &k2)
    {
        return k1.length()<k2.length();
    }
};
int main()
{
    map<string,int,cmp >mp;
    mp["abc"]=100;
    mp["a"]=15;
    mp["dfdsa"]=45;
    map<string,int>::iterator it;
    for(it=mp.begin();it!=mp.end();it++)
        cout<<it->first<<" "<<it->second<<endl;

}

那要如何才能實現對value的排序呢?我們想到使用sort函數,但是sort函數只能對線性的容器進行排序,所以我們需要先把map轉化成一個vector。map中的元素是一個pair

#include<iostream>
#include<cstdio>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
typedef pair<string,int>PAIR;
bool cmp1(const PAIR &k1,const PAIR &k2)
{
    return k1.second>k2.second;
}
struct cmp
{
    bool operator()(const PAIR &k1,const PAIR &k2)
    {
        return k1.second>k2.second;
    }
};
int main()
{
    map<string,int>mp;
    mp["abc"]=100;
    mp["a"]=15;
    mp["dfdsa"]=45;
    vector<PAIR> v(mp.begin(),mp.end());
    //sort(v.begin(),v.end(),cmp());
    sort(v.begin(),v.end(),cmp1);
    for(int i=0;i<v.size();i++)
        cout<< v[i].first<<" "<<v[i].second <<endl;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM