• map按值排序


    map按值排序

    注:

     1     //把map中的元素放到序列容器(如vector)中,然后再对这些元素进行排序
     2     // map是元素为pair,其已实现<操作符的重载
     3     template<class T1, class T2>
     4     inline bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y){
     5         return x.first < y.first   || (!(y.first < x.first) && x.second < y.second);
     6     }
     7     //x.first < y.first指键值小于的情况;
     8     //(!(y.first < x.first) && x.second < y.second);first键相等的情形下value的情况。
     9 
    10     // sort模版
    11     template <class RandomAccessIterator>
    12     void sort ( RandomAccessIterator first, RandomAccessIterator last );
    13 
    14     template <class RandomAccessIterator, class Compare>
    15     void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
    16 
    17     //与map一样均可以指定比较的类。可以定义如下的比较的函数:
    18     int cmp(const pair<string, int>& x, const pair<string, int>& y){
    19         return x.second > y.second;
    20     }
    21     map<string,int> mp;
    22     sort(vec.begin(),vec.end(),combyValue);

    测试代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 bool cmp(const pair<string, int>& x, const pair<string, int>& y){
     4     return x.second > y.second;
     5 }
     6 
     7 void cmpValue(map<string, int>& mp,vector<pair<string, int> >& vec)
     8 {
     9     for (map<string, int>::iterator iter = mp.begin(); iter != mp.end(); iter++)
    10         vec.push_back(make_pair(iter->first, iter->second));//把map里面的值放进vector中
    11     sort(vec.begin(), vec.end(), cmp);//然后对vector自定义排序 cmp
    12 }
    13 int main()
    14 {
    15     map<string, int> mp;
    16     string word;
    17     mp.insert({"abc",1});
    18     mp.insert({"abcd",2});
    19     mp.insert({"abce",3});
    20     mp.insert({"abcf",4});
    21     mp.insert({"abcd",5});
    22     mp.insert({"abcs",7});
    23     vector<pair<string,int> > vec;
    24     cmpValue(mp,vec);
    25     for(int i=0;i<(int)vec.size();i++)
    26         cout<<vec[i].first<<": "<<vec[i].second<<endl;
    27     return 0;
    28 }

    运行结果:

    1 abcs: 7
    2 abcf: 4
    3 abce: 3
    4 abcd: 2
    5 abc: 1
  • 相关阅读:
    理解 RESTful:理论与最佳实践
    Shiro 性能优化:解决 Session 频繁读写问题
    单点登录的三种实现方式
    理解 Spring(二):AOP 的概念与实现原理
    理解 Spring(一):Spring 与 IoC
    MFC查内存泄漏方法
    024 --- 第28章 访问者模式
    023 --- 第27章 解释器模式
    022 --- 第26章 享元模式
    021 --- 第25章 中介者模式
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/11967683.html
Copyright © 2020-2023  润新知