1.一般的结构体的运算符重载(从小到大排序)是这样的:
2.但是优先队列(默认大根堆)的运算符重载(从小到大排序)却是这样的:
眼尖的你肯定发现了重载的不同,即return 里的<和>是反的。那我们就讲讲区别吧:
1.普通的数组用sort函数排序时:
bool operator<(const 结构名 &参数)const 处的<为优先级,指的是前面元素的优先级<后面。那么return y<a.y;就是说前面的值小于后面。---->换句话说就是优先级小的值也小,也就是普通数组的从小到大排序。
2.优先队列:
同样的,bool operator<(const 结构名 &参数)const 处的<为优先级,指的是小于号前面元素的优先级<后面。return y>a.y;就是说小于号前面的值大于后面。(operator小于号后面的元素优先级更大)---->换句话说就是优先级大的值小,因为优先队列(大or小根堆)前面元素的优先级大,也就是优先级从大到小,值从小到大排序。
总结:优先队列return的符号和实际的排序相反,除非你写伪函数结构体&优先队列 自定义排序_guozuofeng的博客-优快云博客_优先队列结构体排序
看到这里,不给个赞嘛