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

转载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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,为了实现STRING类的排序功能,需要重载小于(<)运算符,具体的实现方法如下: ```c++ bool operator<(const STRING& str1, const STRING& str2) { // 比较两个字符串的大小,如果str1小于str2,返回true,否则返回false return str1.compare(str2) < 0; } ``` 这个重载运算符会比较两个字符串的大小,如果第一个字符串小于第二个字符串,则返回true;否则返回false。在实现这个运算符的时候,可以调用STRING类内置的compare函数来进行字符串比较。 ### 回答2: 要为STRING类实现排序功能,我们需要重载小于(<)运算符。首先,我们需要确定STRING类用于比较的属性,一般是字符串的值。 重载小于(<)运算符需要在STRING类定义一个相应的成员函数。在成员函数,我们可以对字符串的值进行比较。比较的方式可以使用标准的字符串比较函数(如 strcmp),或者直接比较字符串的ASCII码值。 下面是一个示例: class STRING { private: string value; public: // 构造函数和其他成员函数的定义 bool operator<(const STRING& other) const { return value < other.value; } }; 在这个示例,我们定义了一个STRING类,并在其重载了小于(<)运算符。比较的依据是字符串的值。在重载函数,我们使用成员函数的方式来访问两个STRING对象的值,并使用小于运算符比较它们。 这样,我们可以使用标准的排序算法(如sort函数)对STRING类的对象进行排序操作。排序时会根据重载的小于运算符来确定元素的相对顺序。 通过重载小于运算符,我们可以方便地在STRING类实现排序功能,使其能够满足排序需求。 ### 回答3: 为了对STRING类实现排序功能,需要重载小于(<)运算符。通过这样的重载,我们可以比较两个字符串的大小,从而实现排序的功能。 在重载小于运算符时,我们需要比较两个字符串的大小。对于字符串的比较,可以使用ASCII码来进行判断。ASCII码是一种字符编码系统,每个字符都有对应的ASCII码值。 在比较两个字符串时,我们可以逐个比较它们对应位置上的字符的ASCII码值。首先比较第一个字符的ASCII码值,如果两个字符串的第一个字符的ASCII码值不同,那么可以根据它们的大小关系来确定它们在排序的先后顺序。如果第一个字符的ASCII码值相同,那么我们就继续比较第二个字符的ASCII码值,以此类推,直到找到不同的字符或者比较完所有字符。 当找到不同的字符时,我们可以根据它们的ASCII码值来确定它们的大小关系。如果第一个字符串的字符的ASCII码值小于第二个字符串对应位置上的字符的ASCII码值,那么第一个字符串就应该排在第二个字符串的前面,否则第一个字符串应该排在第二个字符串的后面。 通过重载小于运算符,我们可以在排序时直接使用标准的比较操作,而不需要手动实现比较函数。这样可以简化排序代码的实现,并且提高代码的可读性。 总之,通过重载小于运算符,我们可以实现对STRING类的排序功能,通过比较字符串字符的ASCII码值来确定字符串的大小顺序。这样可以简化排序实现,并且提高代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值