STL中sort的用法举例

    技术2022-05-20  34

    date:2010-07-02 对象数组排序这里展示了两种方法,定义比较函数或通过重载比较运算符使得类本身是可以比较的,就像基本类型一样。 定义比较函数,既可以通过定义比较运算符(如operator <),也可以直接定义函数(如compare)。 重载运算符之后,可以在sort函数中通过less或greater或less_equal等来调整升序还是降序,默认是升序。 另外,重载运算符后,函数bool operator < 就不要了,否则用g++编译出错。

    view plain copy to clipboard print ? #include <algorithm>    #include <iostream>    #include <vector>    using   namespace  std;   class  MyClass   {   public :       int  id;       MyClass() {}       MyClass(int  i): id( i ) {}       bool  operator < (  const  MyClass &b )  const        {            return  id < b.id;       }             bool  operator > (  const  MyClass &b )  const        {            return  id > b.id;       }   };   /*   bool operator < ( MyClass a, MyClass b )   {       return a.id < b.id;   }   */    bool  compare( MyClass a, MyClass b )   {       return  a.id < b.id;   }   int  main()   {       //数组        cout<<"数组" <<endl;       MyClass arr[10];       srand(time(NULL));       forint  i = 0; i < 10; i++ )           arr[i].id = rand()1;       cout<<"before sort" <<endl;       forint  i = 0; i < 10; i++ )           cout<<arr[i].id<<endl;             sort(arr,arr+10,less<MyClass>());       cout<<"after sort" <<endl;       forint  i = 0; i < 10; i++ )           cout<<arr[i].id<<endl;       //动态数组vector        cout<<"动态数组vector" <<endl;       vector<MyClass> list;       forint  i = 0; i < 10; i++ )           list.push_back( MyClass( rand()1 ) );       cout<<"before sort" <<endl;       forint  i = 0; i < 10; i++ )           cout<<list[i].id<<endl;             sort(list.begin(),list.end(),greater<MyClass>());       cout<<"after sort" <<endl;       forint  i = 0; i < 10; i++ )           cout<<list[i].id<<endl;             //定义比较函数        cout<<"定义比较函数" <<endl;       vector<MyClass> list2;       forint  i = 0; i < 10; i++ )           list2.push_back( MyClass( rand()1 ) );       cout<<"before sort" <<endl;       forint  i = 0; i < 10; i++ )           cout<<list2[i].id<<endl;             sort(list2.begin(),list2.end(),compare);       cout<<"after sort" <<endl;       forint  i = 0; i < 10; i++ )           cout<<list2[i].id<<endl;                 //使得类本身就是可以比较的        cout<<"使得类本身就是可以比较的" <<endl;       vector<MyClass> list3;       forint  i = 0; i < 10; i++ )           list3.push_back( MyClass( rand()1 ) );       cout<<"before sort" <<endl;       forint  i = 0; i < 10; i++ )           cout<<list3[i].id<<endl;             sort(list3.begin(),list3.end());       cout<<"after sort" <<endl;       forint  i = 0; i < 10; i++ )           cout<<list3[i].id<<endl;             return  0;   }   #include <algorithm> #include <iostream> #include <vector> using namespace std; class MyClass { public: int id; MyClass() {} MyClass(int i): id( i ) {} bool operator < ( const MyClass &b ) const { return id < b.id; } bool operator > ( const MyClass &b ) const { return id > b.id; } }; /* bool operator < ( MyClass a, MyClass b ) { return a.id < b.id; } */ bool compare( MyClass a, MyClass b ) { return a.id < b.id; } int main() { //数组 cout<<"数组"<<endl; MyClass arr[10]; srand(time(NULL)); for( int i = 0; i < 10; i++ ) arr[i].id = rand()1; cout<<"before sort"<<endl; for( int i = 0; i < 10; i++ ) cout<<arr[i].id<<endl; sort(arr,arr+10,less<MyClass>()); cout<<"after sort"<<endl; for( int i = 0; i < 10; i++ ) cout<<arr[i].id<<endl; //动态数组vector cout<<"动态数组vector"<<endl; vector<MyClass> list; for( int i = 0; i < 10; i++ ) list.push_back( MyClass( rand()1 ) ); cout<<"before sort"<<endl; for( int i = 0; i < 10; i++ ) cout<<list[i].id<<endl; sort(list.begin(),list.end(),greater<MyClass>()); cout<<"after sort"<<endl; for( int i = 0; i < 10; i++ ) cout<<list[i].id<<endl; //定义比较函数 cout<<"定义比较函数"<<endl; vector<MyClass> list2; for( int i = 0; i < 10; i++ ) list2.push_back( MyClass( rand()1 ) ); cout<<"before sort"<<endl; for( int i = 0; i < 10; i++ ) cout<<list2[i].id<<endl; sort(list2.begin(),list2.end(),compare); cout<<"after sort"<<endl; for( int i = 0; i < 10; i++ ) cout<<list2[i].id<<endl; //使得类本身就是可以比较的 cout<<"使得类本身就是可以比较的"<<endl; vector<MyClass> list3; for( int i = 0; i < 10; i++ ) list3.push_back( MyClass( rand()1 ) ); cout<<"before sort"<<endl; for( int i = 0; i < 10; i++ ) cout<<list3[i].id<<endl; sort(list3.begin(),list3.end()); cout<<"after sort"<<endl; for( int i = 0; i < 10; i++ ) cout<<list3[i].id<<endl; return 0; }

    参考:http://www.cppblog.com/mzty/archive/2009/11/17/1770.html


    最新回复(0)