zoukankan      html  css  js  c++  java
  • std list/vector sort 自定义类的排序就是这么简单

    所以,自己研究了一下,如下:三种方式都可以,如重写<,()和写比较函数compare_index。但是要注意对象和对象指针的排序区别。

    1、容器中是对象时,用操作符<或者比较函数,比较函数参数是引用。

    2、容器中是对象指针时,用()和比较函数排序都可以,比较函数参数是指针。

    3、list用成员方法sort

    4、vector用sort函数

    [cpp] view plain copy
     
    1. class TestIndex{  
    2. public:  
    3.     int index;  
    4.     TestIndex(){  
    5.     }  
    6.     TestIndex(int _index):index(_index){  
    7.     }  
    8.     bool operator()(const TestIndex* t1,const TestIndex* t2){  
    9.         printf("Operator():%d,%d/n",t1->index,t2->index);  
    10.         return t1->index < t2->index;  
    11.     }  
    12.     bool operator < (const TestIndex& ti) const {  
    13.         printf("Operator<:%d/n",ti.index);  
    14.         return index < ti.index;  
    15.     }  
    16. };  
    17. bool compare_index(const TestIndex* t1,const TestIndex* t2){  
    18.     printf("CompareIndex:%d,%d/n",t1->index,t2->index);  
    19.     return t1->index < t2->index;  
    20. }  
    21. int main(int argc, char** argv) {  
    22.     list<TestIndex*> tiList1;  
    23.     list<TestIndex> tiList2;  
    24.     vector<TestIndex*> tiVec1;  
    25.     vector<TestIndex> tiVec2;  
    26.     TestIndex* t1 = new TestIndex(2);  
    27.     TestIndex* t2 = new TestIndex(1);  
    28.     TestIndex* t3 = new TestIndex(3);  
    29.     tiList1.push_back(t1);  
    30.     tiList1.push_back(t2);  
    31.     tiList1.push_back(t3);  
    32.     tiList2.push_back(*t1);  
    33.     tiList2.push_back(*t2);  
    34.     tiList2.push_back(*t3);  
    35.     tiVec1.push_back(t1);  
    36.     tiVec1.push_back(t2);  
    37.     tiVec1.push_back(t3);  
    38.     tiVec2.push_back(*t1);  
    39.     tiVec2.push_back(*t2);  
    40.     tiVec2.push_back(*t3);  
    41.     printf("tiList1.sort()/n");  
    42.     tiList1.sort();//无法正确排序  
    43.     printf("tiList2.sort()/n");  
    44.     tiList2.sort();//用<比较  
    45.     printf("tiList1.sort(TestIndex())/n");  
    46.     tiList1.sort(TestIndex());//用()比较  
    47.     printf("sort(tiVec1.begin(),tiVec1.end())/n");  
    48.     sort(tiVec1.begin(),tiVec1.end());//无法正确排序  
    49.     printf("sort(tiVec2.begin(),tiVec2.end())/n");  
    50.     sort(tiVec2.begin(),tiVec2.end());//用<比较  
    51.     printf("sort(tiVec1.begin(),tiVec1.end(),TestIndex())/n");  
    52.     sort(tiVec1.begin(),tiVec1.end(),TestIndex());//用()比较  
    53.     printf("sort(tiVec1.begin(),tiVec1.end(),compare_index)/n");  
    54.     sort(tiVec1.begin(),tiVec1.end(),compare_index);//用compare_index比较  
    55.     return 0;  
    56. }  
  • 相关阅读:
    CDN缓存
    nginx作用
    Linux下4个查找命令which、whereis、locate、find
    @ModelAttribute的用法,与@RequestBody的区别
    将kafka消息解析拷贝
    永久代溢出(java.lang.OutOfMemoryError: PermGen space )
    失败重试机制-递归应用1
    kafka-重复消费-2
    读写分离-延时问题-1
    UILabel处理html标签
  • 原文地址:https://www.cnblogs.com/xzh1993/p/5845985.html
Copyright © 2011-2022 走看看