• 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;
    
    }
  • 相关阅读:
    java基础
    php中的$_REQUEST超全局变量
    update 数据表 set 字段1=字段1+id的sql语句
    青蛙跳台阶的相关问题
    Java语言实现石头剪刀布游戏
    Java语言实现palindrome(回文)
    Java语言实现奇怪的比赛
    Java语言实现随意组合
    Java编辑器IDEA的下载与安装
    Vscode下载与汉化
  • 原文地址:https://www.cnblogs.com/flightless/p/8560539.html
Copyright © 2020-2023  润新知