priority_queue用法smaller
时间: 2025-01-30 15:24:11 浏览: 33
### C++ 中 `priority_queue` 实现较小值优先
默认情况下,C++ 的 `std::priority_queue` 是最大堆,即每次弹出的是当前队列中的最大元素。为了实现最小堆(即每次弹出最小元素),可以自定义比较函数或将数据取反。
#### 方法一:使用自定义比较器
通过提供第三个模板参数来指定自定义的比较方式:
```cpp
#include <queue>
#include <functional>
int main() {
std::priority_queue<int, std::vector<int>, std::greater<int>> pq;
pq.push(3);
pq.push(1);
pq.push(4);
while (!pq.empty()) {
std::cout << pq.top() << " ";
pq.pop();
}
}
```
这段代码创建了一个基于向量容器存储整数类型的最小堆[^1]。这里选择了标准库提供的 `std::greater<T>` 作为第三参数,它实现了小于运算符的功能,使得 `priority_queue` 成为一个小顶堆。
#### 方法二:反转数值
另一种方法是在插入前将所有元素乘以 `-1` 或者其他负号处理,在取出时再恢复原样。不过这种方法不如直接修改比较逻辑直观可靠。
对于更复杂的数据结构比如对象实例,则可以通过重载 `<` 运算符或定义专门的谓词类来进行定制化排序规则[^2]。
阅读全文
相关推荐





