zoukankan      html  css  js  c++  java
  • 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 */
  • 相关阅读:
    测试Remoting服务端和客户端的双向通信
    对T4模板研究针对SQL SERVER的EF代码生成
    菜鸟级WinForm分页控件
    [小技术应用]框架下动态调用用户控件的模态弹出窗体
    根据数据库表动态添加菜单及打开窗体
    Windows Mobile 5.0下蓝牙移动打印测试
    Window Mobile/CE的PC端安装测试
    基于Dev控件,在WinForm下动态配置界面
    TortoiseSVN使用简介
    SQL的一些经典算法
  • 原文地址:https://www.cnblogs.com/XT-xutao/p/12008506.html
Copyright © 2011-2022 走看看