分享

std::sort的用法

 昵称6290398 2011-11-09
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. //   
  2. //alg_std::sort.cpp  
  3. //  
  4. #include <vector>  
  5. #include <algorithm>  
  6. #include <functional>      // For greater<int>( )  
  7. #include <iostream>  
  8. using namespace std;  
  9.   
  10. // Return whether first element is greater than the second  
  11. bool UDgreater ( int elem1, int elem2 )  
  12. {  
  13.     return elem1 > elem2;  
  14. }  
  15.   
  16. class Csort  
  17. {  
  18. public:  
  19.   
  20. // Return whether first element is less than the second  
  21.     bool operator () (int a,int b) const  
  22.     {  
  23.         return a<b;  
  24.     };  
  25. };  
  26.   
  27.   
  28. int main( )  
  29. {  
  30.     vector <int> v1;  
  31.     vector <int>::iterator Iter1;  
  32.     int arr[12];  
  33.     int i;  
  34.     for ( i = 0 ; i <= 5 ; i++ )  
  35.     {  
  36.         v1.push_back( 2 * i );  
  37.         arr[i]=2*i;  
  38.     }  
  39.     for ( i = 6 ; i <= 11 ; i++ )  
  40.     {  
  41.         arr[i]=23-2*i;  
  42.     }  
  43.   
  44.     int ii;  
  45.     for ( ii = 0 ; ii <= 5 ; ii++ )  
  46.     {  
  47.         v1.push_back( 2 * ii + 1 );  
  48.     }  
  49.   
  50.     cout << "Original vector v1 = ( " ;  
  51.     for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )  
  52.         cout << *Iter1 << " ";  
  53.     cout << ")" << endl;  
  54.     cout << "Original array arr = ( " ;  
  55.     for ( int n=0;n<12;n++ )  
  56.         cout << arr[n] << " ";  
  57.     cout << ")" << endl;  
  58.   
  59.     //std::sort 默认排序方式  
  60.     sort( v1.begin( ), v1.end( ) );  
  61.     cout << "Sorted vector v1 = ( " ;  
  62.     for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )  
  63.         cout << *Iter1 << " ";  
  64.     cout << ")" << endl;  
  65.   
  66.     //使用自定义函数给数组排序,第三个参数为函数指针UDgreater  
  67.     //第二个参数为数据最大地址的后一位指针&arr[12];  
  68.     sort( &arr[0], &arr[12],UDgreater);  
  69.   
  70.     cout << "Resorted (UDgreater) array arr = ( " ;  
  71.     for ( int n=0;n<12;n++ ) cout << arr[n] << " ";  
  72.     cout << ")" << endl;  
  73.     //使用自定义类的 重载operator() 函数给数组排序,第三个参数为【类名()】  
  74.     sort( &arr[0], &arr[12],Csort());  
  75.   
  76.     cout << "Resorted (Csort()) arr = ( " ;  
  77.     for ( int n=0;n<12;n++ ) cout << arr[n] << " ";  
  78.     cout << ")" << endl;  
  79.   
  80.     //使用<functional>库中 greater<int>( ) 给向量V1排序;  
  81.     sort( v1.begin( ), v1.end( ), greater<int>( ) );  
  82.     //sort( v1.begin( ), v1.end( ), Csort() );  
  83.   
  84.     cout << "Resorted (greater) vector v1 = ( " ;  
  85.     for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )  
  86.         cout << *Iter1 << " ";  
  87.     cout << ")" << endl;  
  88.   
  89.     // A user-defined (UD) binary predicate can also be used  
  90.     //sort( v1.begin( ), v1.end( ), UDgreater );  
  91.     sort( v1.begin( ), v1.end( ),Csort());  
  92.     cout << "Resorted (UDgreater) vector v1 = ( " ;  
  93.     for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )  
  94.         cout << *Iter1 << " ";  
  95.     cout << ")" << endl;  
  96.   
  97.     getchar();  
  98.     return 0;  
  99. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多