STL中sort、priority_queue、map、set的自定义比较函数

STL中,sort的默认排序为less,也就是说从小到大排序;priority_queue默认是less,也就说大顶堆;map默认是less,也就说用迭代器迭代的时候默认是小的排在前面;set默认是less,也就是说用迭代器迭代的时候是从小到大排序的。

1、sort

  1. #include <stdio.h>   
  2. #include <algorithm>   
  3. #include <functional>   
  4. using namespace std;  
  5.   
  6. bool comp(const int& a, const int& b ){  
  7.     return a < b ; //从小到大   
  8. }  
  9. struct cmp{  
  10.     bool operator()( const int& a , const int& b ) const{  
  11.         return a < b ;      //从小到大   
  12.     }  
  13. } ;  
  14.   
  15. int main(){  
  16.     int array[] = {1 ,5 ,4, 10 , 3, 6 }  ;  
  17.     sort( array , array+6 ) ; //以默认的less<int>()排序   
  18.     sort( array , array+6 , greater<int>() ) ;  //从大到小排序   
  19.     sort( array , array+6 , comp ) ;  
  20.     sort( array , array+6 , cmp() ) ;  
  21.     for(int i=0;i<6;++i)    printf("%d ",array[i]); printf("\n");  
  22.     return 0 ;  
  23. }  
#include <stdio.h>
#include <algorithm>
#include <functional>
using namespace std;

bool comp(const int& a, const int& b ){
    return a < b ; //从小到大
}
struct cmp{
    bool operator()( const int& a , const int& b ) const{
        return a < b ;      //从小到大
    }
} ;

int main(){
    int array[] = {1 ,5 ,4, 10 , 3, 6 }  ;
    sort( array , array+6 ) ; //以默认的less<int>()排序
    sort( array , array+6 , greater<int>() ) ;  //从大到小排序
    sort( array , array+6 , comp ) ;
    sort( array , array+6 , cmp() ) ;
    for(int i=0;i<6;++i)    printf("%d ",array[i]); printf("\n");
    return 0 ;
}

2、priority_queue

  1. #include <stdio.h>   
  2. #include <queue>   
  3. using namespace std ;  
  4.   
  5. struct cmp{  
  6.     bool operator()( const int& a , const int& b )const{  
  7.         return a < b ;      //大顶堆   
  8.     }  
  9. };  
  10. struct Node{  
  11.     int x, y ;  
  12.     Node(int _x, int _y ):x(_x),y(_y){}  
  13.     bool operator <(const Node& n1)const{  
  14.         if( x < n1.x )    return true ;     //按照x为第一关键字由大到小排序   
  15.         else if( x == n1.x )   return y < n1.y  ;   //y为第二关键字由大到小排序   
  16.         else    return false ;  
  17.     }  
  18. } ;  
  19.   
  20. int main(){  
  21.     //priority_queue<int> q ; //优先队列默认是less,大顶堆 ;   
  22.     //priority_queue<int,vector<int> ,cmp> q ;   
  23.     priority_queue< Node > q ;  
  24.   
  25.     for(int i=0;i<10;i++)   q.push( Node( rand() , rand() ) );  
  26.     while( !q.empty() ){  
  27.         printf("%d %d\n",q.top().x , q.top().y ) ;  
  28.         q.pop() ;  
  29.     }  
  30.     return 0 ;  
  31. }  
#include <stdio.h>
#include <queue>
using namespace std ;

struct cmp{
    bool operator()( const int& a , const int& b )const{
        return a < b ;      //大顶堆
    }
};
struct Node{
    int x, y ;
    Node(int _x, int _y ):x(_x),y(_y){}
    bool operator <(const Node& n1)const{
        if( x < n1.x )    return true ;     //按照x为第一关键字由大到小排序
        else if( x == n1.x )   return y < n1.y  ;   //y为第二关键字由大到小排序
        else    return false ;
    }
} ;

int main(){
    //priority_queue<int> q ; //优先队列默认是less,大顶堆 ;
    //priority_queue<int,vector<int> ,cmp> q ;
    priority_queue< Node > q ;

    for(int i=0;i<10;i++)   q.push( Node( rand() , rand() ) );
    while( !q.empty() ){
        printf("%d %d\n",q.top().x , q.top().y ) ;
        q.pop() ;
    }
    return 0 ;
}

3、map

  1. #include<stdio.h>   
  2. #include <map>   
  3. using namespace std;  
  4.   
  5. struct cmp{  
  6.     bool operator()( const int& a, const int& b ) const{  
  7.         return a < b ; //从小到大;   
  8.     }  
  9. };  
  10. int main(){  
  11.     //map<int, int,greater<int> > mp ;  //从大到小   
  12.     map<int , int ,cmp> mp ;  
  13.     for(int i=0;i<10;++i)   mp.insert( map<int,int,cmp >::value_type(rand() ,i) ) ;  
  14.     map<intint, cmp >::iterator it = mp.begin() ;  
  15.     for( ;it!=mp.end() ;it++)   printf("%d %d\n",(*it).first , (*it).second );  
  16.     return 0 ;  
  17. }  
#include<stdio.h>
#include <map>
using namespace std;

struct cmp{
    bool operator()( const int& a, const int& b ) const{
        return a < b ; //从小到大;
    }
};
int main(){
    //map<int, int,greater<int> > mp ;  //从大到小
    map<int , int ,cmp> mp ;
    for(int i=0;i<10;++i)   mp.insert( map<int,int,cmp >::value_type(rand() ,i) ) ;
    map<int, int, cmp >::iterator it = mp.begin() ;
    for( ;it!=mp.end() ;it++)   printf("%d %d\n",(*it).first , (*it).second );
    return 0 ;
}


4、set

  1. #include <stdio.h>   
  2. #include <iostream>   
  3. #include <algorithm>   
  4. #include <set>   
  5.   
  6. using namespace std;  
  7.   
  8. struct cmp{  
  9.     bool operator()( const int& a , const int& b )const{  
  10.         return a < b ; //从小到大   
  11.     }  
  12. } ;  
  13.   
  14. int main(){  
  15.     //set<int > s ;   
  16.     set<int,cmp> s ;  
  17.     for(int i=0;i<10;i++)   s.insert( rand() ) ;  
  18.     set<int,cmp>::iterator it = s.begin() ;  
  19.     for( ; it!=s.end();it++)  
  20.         printf("%d\n",*it);  
  21.     return 0 ;  
  22. }  
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <set>

using namespace std;

struct cmp{
    bool operator()( const int& a , const int& b )const{
        return a < b ; //从小到大
    }
} ;

int main(){
    //set<int > s ;
    set<int,cmp> s ;
    for(int i=0;i<10;i++)   s.insert( rand() ) ;
    set<int,cmp>::iterator it = s.begin() ;
    for( ; it!=s.end();it++)
        printf("%d\n",*it);
    return 0 ;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值