📅  最后修改于: 2023-12-03 14:39:50.422000             🧑  作者: Mango
优先级队列是STL中的一个高效数据结构,其内部使用堆实现,可以用于解决很多实际问题,如Dijkstra最短路径算法、Huffman编码等等。在STL中,优先级队列的底层数据结构是堆,在STL中,优先级队列不支持遍历,仅支持插入元素,并以优先级顺序弹出元素,因此具有很高的效率。
以下是一个简单的示例代码,演示如何使用STL中的优先级队列读入一些数字并以单调递减的顺序输出这些数字。
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main() {
int n, x;
priority_queue<int, vector<int>, greater<int>> q; // 小根堆
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
q.push(x);
}
while (!q.empty()) {
cout << q.top() << endl;
q.pop();
}
return 0;
}
在这段代码中,我们首先定义了一个priority_queue
对象,使用了第二、第三个模板参数来指定使用一个基于vector
的堆,并使用greater<int>
指定了小根堆。然后我们读入了一些数字并将它们插入到队列中,最后按序弹出每一个元素并打印出来。
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
首先我们需要包含STL头文件<iostream>
、<queue>
和<vector>
。
priority_queue<int, vector<int>, greater<int>> q;
这行代码定义了一个priority_queue
对象,使用了第二、第三个模板参数来指定使用一个基于vector
的堆,并使用greater<int>
指定小根堆。也就是说,我们创建的堆是一个小根堆。
for (int i = 0; i < n; i++) {
cin >> x;
q.push(x);
}
在这个循环中,我们读入了一些数字,并将它们插入到堆中。
while (!q.empty()) {
cout << q.top() << endl;
q.pop();
}
在这个循环中,我们使用top()
取出当前的最小元素,接着使用pop()
将其从堆中弹出。这个循环会一直重复,直到堆为空(即没有元素需要弹出了)。
优先级队列是一个非常有用的数据结构,可以使用STL中的priority_queue
来快速、方便地实现。本文介绍了如何使用STL中的priority_queue
读入一些数字并以单调递减的顺序输出这些数字。这里非常建议读者自己亲手尝试一下,深入理解该数据结构的使用方法。