优先队列(默认大根堆)
在C++中,
priority_queue
默认情况下,以vector
为底层容器,加上heap
(默认max-heap
)处理规则;形成大根堆。
#include <iostream>
#include <queue>
using namespace std;
int main() {
priority_queue<int> q;
q.push(3);
q.push(5);
q.push(1);
while(!q.empty()) {
cout << q.top() << endl;
q.pop();
}
return 0;
}
// priority_queue<int> q;
// 大根堆 输出
5
3
1
小根堆
而在这个例子中,我们使用了STL自带的小根堆,因此需要将
vector
改为greater<int>
。 其中,vector<int>
是指底层容器的类型,而greater<int>
是指比较函数对象的类型。
#include <iostream>
#include <queue>
using namespace std;
int main() {
priority_queue<int,vector<int>,greater<int>> q;
q.push(3);
q.push(5);
q.push(1);
while(!q.empty()) {
cout << q.top() << endl;
q.pop();
}
return 0;
}
// priority_queue<int,vector<int>,greater<int>> q;
// 小根堆 输出
1
3
5