- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- using namespace std;
- class Cat{
- public:
- int id;
- string name;
- int age;
- Cat(int i,string n,int a){
- id = i;
- name =n;
- age = a;
- }
- };
- /*
- 实现自己的比较函数:
- 格式:
- bool compName(Obj1, Obj2);
- 注意:
- 1. 函数必须返回 bool 值
- 2. 函数如果返回 true 就表示该参数或者标准按这种顺序排序 (即不用 swap), 返回 false 即会 swap
- 3. 函数作为 sort(beginIndex,endIndex,compName) 的第三个参数;
- */
- bool myCompare(Cat *a,Cat* b){
- // 先按 id 从小到大排序
- if(a->id<b->id)return true;
- else if(a->id>b->id)return false;
- else {
- //id 相同
- // 按 name 的字典序排序
- if(a->name.compare(b->name)<0)return true;
- else if(a->name.compare(b->name)>0)return false;
- else{
- //name 相同, 按 age 从小到大排序
- if(a->age<b->age)return true;
- if(a->age>b->age)return false;
- else{
- //age 也相同
- // 返回 true
- return true;
- }
- }
- }
- }
- int main(){
- vector<Cat*> v ;
- v.push_back(new Cat(1,"Jim",1));
- v.push_back(new Cat(1,"Jima",1));
- v.push_back(new Cat(1,"Jimb",1));
- v.push_back(new Cat(1,"Jimc",1));
- v.push_back(new Cat(1,"J",1));
- v.push_back(new Cat(2,"Jim",1));
- v.push_back(new Cat(2,"Jizzz",1));
- v.push_back(new Cat(2,"Jim",2));
- v.push_back(new Cat(2,"Jim",3));
- sort(begin(v),end(v),myCompare);
- for(int i=0;i<v.size();i++){
- Cat * c = v[i];
- cout<<c->id<<""<<c->name<<" "<<c->age<<endl;
- }
- }
- /*
- output:
- 1 J 1
- 1 Jim 1
- 1 Jima 1
- 1 Jimb 1
- 1 Jimc 1
- 2 Jim 1
- 2 Jim 2
- 2 Jim 3
- 2 Jizzz 1
- */
来源: http://www.bubuko.com/infodetail-3323214.html