STL sort实现可迭代容器中对象的多重标准排序

 1 #include  <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <algorithm>
 5 
 6 using namespace std;
 7 
 8 class Cat{
 9 public:
10     int id;
11     string name;
12     int age;
13     Cat(int i,string n,int a){
14         id = i;
15         name =n;
16         age = a;
17         
18     }    
19 };
20 
21 /*
22 实现自己的比较函数:
23 格式:
24     bool compName(Obj1, Obj2);
25 注意:
26 1. 函数必须返回bool值
27 2. 函数如果返回true就表示该参数或者标准按这种顺序排序(即不用swap),返回false即会swap
28 3. 函数作为sort(beginIndex,endIndex,compName)的第三个参数;
29 
30 */
31 bool myCompare(Cat *a,Cat* b){
32     //先按id从小到大排序
33     if(a->id<b->id)return true;
34     else if(a->id>b->id)return false;
35     else {
36         //id相同
37         //按name的字典序排序
38         if(a->name.compare(b->name)<0)return true;
39         else if(a->name.compare(b->name)>0)return false;
40         else{
41             //name相同,按age从小到大排序
42             if(a->age<b->age)return true;
43             if(a->age>b->age)return false;
44             else{
45                 //age也相同
46                 //返回true
47                 return true;
48             }
49         }
50         
51     }
52 }
53 
54 
55 int main(){
56     vector<Cat*> v ;
57     v.push_back(new Cat(1,"Jim",1));
58     v.push_back(new Cat(1,"Jima",1));
59     v.push_back(new Cat(1,"Jimb",1));
60     v.push_back(new Cat(1,"Jimc",1));
61     v.push_back(new Cat(1,"J",1));
62     v.push_back(new Cat(2,"Jim",1));
63     v.push_back(new Cat(2,"Jizzz",1));
64     v.push_back(new Cat(2,"Jim",2));
65     v.push_back(new Cat(2,"Jim",3));
66     sort(begin(v),end(v),myCompare);
67     for(int i=0;i<v.size();i++){
68         Cat * c = v[i];
69         cout<<c->id<<" "<<c->name<<" "<<c->age<<endl;
70     }
71     
72 }
73 
74 /*
75 output:
76 1 J 1
77 1 Jim 1
78 1 Jima 1
79 1 Jimb 1
80 1 Jimc 1
81 2 Jim 1
82 2 Jim 2
83 2 Jim 3
84 2 Jizzz 1
85 
86 */

猜你喜欢

转载自www.cnblogs.com/XT-xutao/p/12008506.html