std list/vector sort 自定义类的排序就是这么简单

本文详细介绍了C++中list和vector容器的排序方法,包括直接使用成员方法sort、使用STL提供的sort函数以及通过自定义比较函数实现排序的过程。特别针对容器内存放对象和对象指针两种情况进行了区分说明。
摘要由CSDN通过智能技术生成

网上江湖郎中和蒙古大夫很多,因此,此类帖子也很多。关于排序,我还真没研究过,看了江湖郎中和蒙古大夫的帖子,搞了半天不行,所以,自己研究了一下,如下:三种方式都可以,如重写<,()和写比较函数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. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值