C++优先队列仿函数
时间: 2023-10-19 22:30:44 浏览: 93
优先队列是一种数据结构,它可以按照一定的优先级顺序对元素进行排序和访问。在 C++ 中,我们可以使用优先队列容器来实现这个功能。
优先队列容器是通过堆的数据结构实现的,所以在使用优先队列时,我们需要指定元素的比较方式。在 C++ 中,我们可以通过仿函数(function object)来定义比较规则。
仿函数是一种类对象,它可以像函数一样被调用。在优先队列中,我们需要定义一个仿函数来确定元素的优先级顺序。这个仿函数需要重载函数调用运算符 `operator()`,并根据自定义的比较规则来判断两个元素的优先级。
以下是一个示例代码,展示了如何使用仿函数来定义优先队列的比较规则:
```cpp
#include <iostream>
#include <queue>
class MyCompare {
public:
bool operator()(int a, int b) {
// 自定义比较规则,这里使用逆序
return a > b;
}
};
int main() {
std::priority_queue<int, std::vector<int>, MyCompare> pq;
pq.push(3);
pq.push(1);
pq.push(5);
while (!pq.empty()) {
std::cout << pq.top() << " ";
pq.pop();
}
return 0;
}
```
在上面的示例中,我们定义了一个名为 `MyCompare` 的仿函数类,重载了 `operator()` 运算符,使用逆序的方式来比较元素的优先级。然后,我们在创建优先队列时将 `MyCompare` 作为第三个参数传递进去,告诉优先队列使用这个仿函数来确定元素的优先级顺序。
当我们按照逆序的方式插入元素后,从优先队列中取出的元素会按照升序的方式输出。
希望这个示例可以帮助你理解如何使用仿函数来定义优先队列的比较规则。如有疑问,请随时提问。
阅读全文