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)); 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; } #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