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);