c++优先队列小根堆
时间: 2023-07-01 07:18:55 浏览: 162
C++中的优先队列默认是大根堆,如果要使用小根堆,可以通过以下两种方式实现:
1. 自定义比较函数
在创建优先队列时,可以自定义比较函数,使其按照小根堆的方式进行排序。比较函数需要返回一个bool类型的值,表示两个元素的大小关系。
```cpp
#include <queue>
using namespace std;
struct cmp{
bool operator()(int a, int b){
return a > b; // 小根堆,a比b小返回true
}
};
int main(){
priority_queue<int, vector<int>, cmp> pq;
pq.push(5);
pq.push(2);
pq.push(7);
while(!pq.empty()){
cout << pq.top() << " ";
pq.pop();
}
return 0;
}
```
2. 使用greater模板类
STL中提供了一个greater模板类,可以用来定义小根堆。在定义优先队列时,将比较函数的类型设置为greater<T>即可。
```cpp
#include <queue>
using namespace std;
int main(){
priority_queue<int, vector<int>, greater<int>> pq;
pq.push(5);
pq.push(2);
pq.push(7);
while(!pq.empty()){
cout << pq.top() << " ";
pq.pop();
}
return 0;
}
```
阅读全文