转载up:原文链接:https://blog.csdn.net/HD_TMG/article/details/128794306
(本人转载当笔记食用)
先上代码(return id>t.id 没有t.的要在前面,有t.的要在后面)
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小,自己就排前面。
————————————————
版权声明:本文为CSDN博主「谁写的代码?逗死我了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HD_TMG/article/details/128794306