结构体内嵌比较函数bool operator < (const p &a)const
最近看见有人在使用sort()函数进行排序时,使用 operator <(const node &a)const
这种形式, 自己不是很懂,所以查了下资料,记录一下。
struct node { //定义一个结构体node(节点)
int x;
int y;
int len; //node中有3个成员变量x,y,len
bool operator <(const node &a)const { //重载<操作符。可以对两个node使用<操作符进行比较
return len<a.len;
}
};
直接写比较函数是裸的len表示当前的值,如果len<a.len,那么就是从小到大排序。
括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改!
例如:
#include <iostream>
#include <algorithm>
using namespace std;
struct node { //定义一个结构体node(节点)
int x;
int y;
int len; //node中有3个成员变量x,y,len
node(){} // 用以不初始化就定义结构体变量
node(int _x, int _y, int _len): x(_x), y(_y), len(_len) {}
bool operator <(const node &a)const { //重载<操作符。可以对两个node使用<操作符进行比较
return len < a.len;
}
};
int main()
{
node pt[3];
pt[0] = node(1, 2, 6);
pt[1] = node(3, 4, 4);
pt[2] = node(6,1, 9);
sort(pt, pt + 3);
for(int i = 0; i < 3; i ++)
cout << pt[i].len << " ";
return 0;
}
直接使用sort(pt, pt + 3)
就可以完成对pt数组的排序。
另外,也可以使用自己定义bool cmp(node a, node b)
来实现
#include <iostream>
#include <algorithm>
using namespace std;
struct node { //定义一个结构体node(节点)
int x;
int y;
int len; //node中有3个成员变量x,y,len
node(){} // 用以不初始化就定义结构体变量
node(int _x, int _y, int _len): x(_x), y(_y), len(_len) {}
// bool operator <(const node &a)const { //重载<操作符。可以对两个node使用<操作符进行比较
// return len < a.len;
// }
};
bool cmp(node a, node b)
{
return a.len < b.len;
}
int main()
{
node pt[3];
pt[0] = node(1, 2, 6);
pt[1] = node(3, 4, 4);
pt[2] = node(6,1, 9);
sort(pt, pt + 3, cmp);
for(int i = 0; i < 3; i ++)
cout << pt[i].len << " ";
return 0;
}
ps: caiji一枚,努力刷题~~~