C++为结构体or类使用sort()排序

CSDN例子:

 

在对结构体数组排序时,首先确定排序数组的关键字,并且在排序过程中不是交换关键字的顺序,而是交换这个结构的地址,从而使结构体数组有序。

 

#include <iostream>

using namespace std;

#include <algorithm>

typedef struct Test

{

       int a;

       int b;

}t;

t test[100];

 

bool Cmpare(const t &a, const t &b)           

//const必须加,不然会错,目前不懂为啥。当return的是ture时,a先输出,所以示例中是升序

{

     return a.a < b.a;

}

 

int main()

{

    sort(test, test+ 100,cmpare);                     

    return 0;

}

 

 

 

C++教材例子:

如果容器元素是用户定义的对象,则要使用sort( ),必须定义能够处理该

类型对象的operator<( )函数。例如,如果为Review提供了成员或非成员函数

operator<( ),则可以对包含Review对象的矢量进行排序。由于Review是一个

结构,因此其成员是公有的,这样的非成员函数将为:

 

有了这样的函数后,就可以对包含Review对象(如books)的矢量进行排

序了:

上述版本的operator<( )函数按title成员的字母顺序排序。如果title成员相

同,则按照rating排序。然而,如果想按降序或是按rating(而不是title)排

序,该如何办呢?可以使用另一种格式的sort( )。它接受3个参数,前两个参

数也是指定区间的迭代器,最后一个参数是指向要使用的函数的指针(函数

对象),而不是用于比较的operator<( )。返回值可转换为bool,false表示两个

参数的顺序不正确。下面是一个例子:

有了这个函数后,就可以使用下面的语句将包含Review对象的books矢量

按rating升序排列:

 

注意,与operator<( )相比,WorseThan( )函数执行的对Review对象进行排

序的工作不那么完整。如果两个对象的title成员相同,operator<( )函数将按

rating进行排序,而WorseThan( )将它们视为相同。第一种排序称为全排序

(total ordering),第二种排序称为完整弱排序(strict weak ordering)。在全

排序中,如果a<b和b<a都不成立,则a和b必定相同。在完整弱排序中,情况

就不是这样了。它们可能相同,也可能只是在某方面相同,如WorseThan( )

示例中的rating成员。所以在完整弱排序中,只能说它们等价,而不是相同。

 

 

我的例子:

 

 

class Position{

    public:

    int start;

    int end;

};

 

bool operator<(const Position &a, const Position &b)            //const必须加,不然会错,目前不懂为啥。当return的是ture时,a先输出,所以示例中是升序

{

     return a.end < b.end;

}

 

 

Position a[n];

    for(int i = 0; i < n; i++){

        cin >> a[i].start;

        cin >> a[i].end;

    }

 

    sort(a,a+n);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值