我们假设需要对一个结构体进行排序,例如:
struct candy
{
int v;
int w;
} candies[110];
需要对此结构体以v/w的大小进行排序;c++的STL库函数给我们提供了一个排序函数sort;
但要使用sort函数进行排序,我们有以下两种方法。
一 .重载比较运算符
我们可以对比较运算符进行重载:
struct candy
{
int v;
int w;
bool operator<(const candy& c) {
return double(v) / w - double(c.v) / c.w > eps;
}
} candies[110];
然后直接写sort函数排序即可:
sort(candies, candies + N);
二. 写一个布尔类型返回值的普通函数
struct candy
{
int v;
int w;
} candies[110];
bool cmp(candy c1, candy c2) {
return double(c1.v) / c1.w - double(c2.v) / c2.w > eps;
}
cmp函数作为结构体比较的规则,直接写在结构体外面即可;但与重载运算符不同的是,sort函数中需要多添加一个参数:
sort(candies, candies + N,cmp);