优先队列 小于号的重载
时间: 2023-08-14 07:11:45 浏览: 128
在 C++ 中,我们可以通过重载小于号运算来定义自定义类的优先队列排序规则。下面是一个示例代码:
```cpp
#include <iostream>
#include <queue>
class MyClass {
public:
int value;
MyClass(int val) : value(val) {}
// 重载小于号运算符
bool operator<(const MyClass& other) const {
// 根据需要定义排序规则
return value < other.value;
}
};
int main() {
std::priority_queue<MyClass> pq;
pq.push(MyClass(3));
pq.push(MyClass(1));
pq.push(MyClass(4));
pq.push(MyClass(2));
while (!pq.empty()) {
std::cout << pq.top().value << " ";
pq.pop();
}
return 0;
}
```
在上面的示例中,我们定义了一个名为 `MyClass` 的自定义类,并在其中重载了小于号运算符。在 `operator<` 中,我们根据类的 `value` 成员变量来定义排序规则。然后,我们使用 `std::priority_queue` 来创建一个优先队列,并将自定义类的对象插入队列中。最后,我们从队列中取出元素并打印出来,可以看到它们按照我们定义的排序规则进行了排序。
输出结果为:1 2 3 4
这里需要注意的是,在重载小于号运算符时,需要保证排序规则是严格弱序关系,即满足传递性、反对称性和非对称性。否则可能导致优先队列的行为不可预测。
阅读全文