先上代码
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小,自己就排前面。