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中很多算法为了满足多样的需求,都提供了这样的接口,在实际使用的时候,我们可以自己设计函数来改变算法的功能,应该灵活运用。

发布了15 篇原创文章 · 获赞 4 · 访问量 471

猜你喜欢

转载自blog.csdn.net/benobug/article/details/104976386