关于结构体中 operator< 重载对sort和priority_queue(优先队列)的影响

本文探讨了如何在C++结构体`person`中通过重载`<`运算符,使结构体在排序时依据age属性。作者解释了重载的概念,展示了如何编写重载函数并应用于`sort`操作,以及不同的重载带来的排序效果变化。
摘要由CSDN通过智能技术生成

前言

关于在结构体中重载运算法这个问题,起初个人也不算太理解,在浏览许多博文之后发现每个人的解释都不大一样。思考许久之后,决定写一下自己的见解。如果差错,欢迎各位指出。

正题

首先,我们看一个结构体person。

struct person
{
	double height;
	double weight;
	double age;

}p[20];

不难看出,在结构体person中,我们定义了三个double变量:height,weight,age。我们就用这个结构体来表示人的一些属性。

person 小明,小刚;     //定义出来两个人

看完结构体后,再来看三个表达式:
在这里插入图片描述
前两个数学表达式在我们看来,十分容易理解。

那么第三个表达式要怎么理解呢?小明的身高小于小刚?小明的体重小于小刚?小明的年龄小于小刚?

因为小明与小刚是人,在我们所熟知的世界中,并没有直接拿两个人直接比较的,比较的只是两个人的某种属性。

那么我们就以年龄为标准,用sort来对peron这个结构体进行排序。

sort(first_pointer,first_pointer+n,cmp);

冷静!sort函数里好像并不能满足我们的意思。那要怎么解决呢?对了,重载!

重载

在这里插入图片描述
在这里插入图片描述

结合我们的第二幅图,我们就可以通过重载 ‘<’ 让结构体在使用 ‘<’ 进行排序的时候直接找到他要走的那条路。那么我们就可以在结构体重加入重载<的一个函数:

struct person
{
	double height;
	double weight;
	double age;

bool operator<(const person &x) const
	{
		return age < x.age;
	}
	
}p[20];

此处内容,个人理解,可能会有错误,但是可以帮助你理解这个重载函数:

首先看重载函数是bool类型,那么只有true或false两种取值,当 age < x.age 为true时,函数的返回值也是true。反之为false。(此处的age == this.age)

此时根据重载,用sort(p,p+20)就可以直接排序了,因为这个时候根据图二,我们可以知道 < 直接重载,可以根据person的age属性来进行比较了。

如果把重载函数中的小于号换成大于号

bool operator<(const person &x) const
	{
		return age > x.age;
	}

那么我们是不是就可以认为,此时的 ‘>’ 和 '<'翻转了,大于是小于,小于才是大于。
这个时候,就相当于我们把原来的顺序给逆序了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值