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
  • 相关阅读:
    HDU Railroad (记忆化)
    HDU 1227 Fast Food
    HDU 3008 Warcraft
    asp vbscript 检测客户端浏览器和操作系统(也可以易于升级到ASP.NET)
    Csharp 讀取大文本文件數據到DataTable中,大批量插入到數據庫中
    csharp 在万年历中计算显示农历日子出错
    csharp create ICS file extension
    CSS DIV Shadow
    DataTable search keyword
    User select fontface/color/size/backgroundColor设置 字体,颜色,大小,背景色兼容主流浏览器
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/11967683.html
Copyright © 2011-2022 走看看