C++ STL中对自己编写的类或结构体排序的方法(传函数指针和结构体的区别)

使用sort对元素进行排序时,如果元素是自己设计的类或者结构体,需要编写比较函数,作为参数传给sort,此时有两种方法可以进行处理

方法一

重载自己设计的类或结构体的比较运算符,则默认情况下将从小到大排序(此时仅需重载<运算符),如果要从大到小排序,第三个参数应设置为greater()并重载>大于号运算符,T为元素的类型(默认情况下是less())

bool operator>(Student a, Student b) { return a > b; }
sort(begin, end, greater<Student>())
方法二

有时候使用的类是别人设计的,比较运算符已经被重载,但不是我们想要的方式。这个时候自己编写比较运算符的重载函数是行不通的。应该使用传递函数指针或者结构体的方法来处理。

传函数指针
bool cmp(Student a, Student b) { return a > b; } 
sort(begin, end, cmp);
传结构体
struct Mycmp{
	bool operator()(Student a, Student b) { return a > b; }
}st_cmp;
sort(begin, end, st_cmp);

因为结构体重载了()括号运算符,所以st_cmp(a, b)调用结构体中的声明的方法,与直接编写函数cmp等效。
sort第三个参数为模板,所以函数指针和结构体都可接收,两者调用的格式又一样,因此都能用。

不仅仅是sort函数,STL中很多算法为了满足多样的需求,都提供了这样的接口,在实际使用的时候,我们可以自己设计函数来改变算法的功能,应该灵活运用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值