优先队列是按值从大到小排列的,top元素是值最大的。要想让优先队列从小到大排列就要重载运算符函数





以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
#include <queue>
#include <iostream>
using namespace std;
class Point {
public:
int x;
int y;
int times;
friend class PriorityQueue;
};
class PriorityQueue {
private:
queue<Point> pq;
public:
void push(Point p) {
pq.push(p);
}
Point pop() {
return pq.front();
}
bool empty() const {
return pq.empty();
}
};
void test() {
PriorityQueue q;
q.push(Point(3, 4, 5));
q.push(Point(6, 8, 7));
cout << "Pop: " << q.pop().x << ", " << q.pop().y << endl;
}
int main() {
test();
return 0;
}
在这个例子中,我们创建了一个PriorityQueue类,它使用一个queue<Point>来存储点,并提供了push、pop和empty成员函数来进行添加、弹出和检查是否为空的操作。通过实现operator<,我们可以将点按照时间(即times)从小到大排序。
这个例子中的代码展示了如何使用operator<来改变对象之间的比较顺序。在C++标准库中,可以使用友元函数或者构造函数等方法来重载不同的比较运算符,从而达到不同的目的。