C++ 中 operator< 运算符重载来实现 sort 排序的简单理解

先上代码

Struct Student
{
	string id;
	int grade;

	bool operator< (const Student& t) const
	{
		if (grade != t.grade) return grade > t.grade;
		return id < t.id;
	}
}

上述代码表示的含义是:如果调用了sort函数后,成绩高的排前面,在同成绩情况下,id小的排前面。
实际上operator<就是一个函数,它定义了不同Student之间的<比较方式,返回true/false,而在sort函数内部,就是用<来进行判断与排序的。因此只要重载运算符<即可实现排序。
此外注意运算符函数参数是自带this的,比如一般我们会写下列代码实现某些功能。

就是通过重载运算符实现了原本不可比较的元素之间的比较。

Struct Student std1, std2;
if(std1 < std2){
	// code...
}

实际上两个比较调用的是如下

bool operator< (Student& std1, Student& std2)
{
	if (std1.grade != std2.grade) return std1.grade > std2.grade;
	return std1.id < std1.id;
}

但在C++中,operator<已经有一个隐藏参数this,指向的是std1,只需要传入比较符后面的值即可。

bool operator< (const Student& t) const
{
	if(grade != t.grade) return grade > t.grade;	// std1.grade > std2.grade,std1排前面
	else return id < t.id;							// 相等情况下,std1.id 小,就排前面
}

小结一下,重载小于号运算符,就是以自己为中心,t是待比较的元素,return的内容就是谁排前面的判定规则。上面就是如果自己的grade比t的grade大,自己就排前面;同grade情况下,如果自己的id小,自己就排前面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值