用c++取优先队列最小值
时间: 2024-09-07 20:06:28 浏览: 46
在C++中,优先队列(priority_queue)默认是最大堆实现,即队列顶元素是所有元素中最大的。如果要取优先队列中的最小值,需要做一些调整。
首先,可以通过定义一个自定义比较函数,将其作为优先队列的第三个模板参数传入。这个比较函数将会告诉优先队列如何排序元素。使用最小堆作为比较函数,就可以让优先队列取出最小元素。
例如:
```cpp
#include <queue>
#include <functional>
// 定义一个最小堆比较函数
struct MinCompare {
bool operator()(const int& lhs, const int& rhs) {
return lhs > rhs; // 最小值优先
}
};
int main() {
// 创建一个最小堆的优先队列
std::priority_queue<int, std::vector<int>, MinCompare> min_heap;
// 向优先队列中添加一些数据
min_heap.push(3);
min_heap.push(1);
min_heap.push(4);
min_heap.push(1);
// 取出最小值
while (!min_heap.empty()) {
int min_value = min_heap.top(); // 获取最小值
std::cout << min_value << std::endl;
min_heap.pop(); // 移除最小值
}
return 0;
}
```
在这段代码中,`MinCompare`结构体定义了一个比较函数,使得优先队列按照最小值优先的方式排序。每次调用`top()`函数时,都会返回当前队列中的最小值。
阅读全文