zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    第二次站立会议4
    第二次站立会议3
    建议总结
    对搜狗输入法的个人评价
    第二期站立会议10
    典型用户和用户场景描述
    第二期站立会议9
    第二期站立会议8
    第二期站立会议7
    第二期站立会议6
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/11967683.html
Copyright © 2011-2022 走看看