优先队列
Coddy C++ 标准模板库 课程的第 12 课,共 23 课。
在 C++ 中,我们还有一种名为优先队列的数据结构。优先队列提供了普通队列没有的特殊功能,每个元素都关联一个优先级,元素会根据优先级进行处理。

基本的优先队列经过设计,使队列的第一个元素是所有元素中最大的,其余元素按降序排列。
priority_queue<dataType> queueName首先,我们需要在 C++ 文件顶部引入优先队列头文件。
我们像创建之前学过的其他容器一样,创建优先队列。
priority_queue<int> integers;接下来,我们使用 push() 方法向队列中添加新元素。元素会被添加到队列中。如果它大于所有其他元素,就会排在最前面;如果它小于所有其他元素,就会排在最后面,其他情况以此类推。
integers.push(5); // integers = {5)要输出元素,我们像处理栈一样使用 top() 方法。它会输出优先级最高的元素。对于整数来说,它会输出最大的数字。
integers.push(100); // integers = {100, 5}
integers.push(10); // integers = {100, 10, 5}
integers.push(3); // integers = {100, 10, 5, 3}
cout << integers.top();Output:
100我们也可以像处理栈一样,使用 pop() 方法移除元素。它会移除顶部的元素,也就是优先级最高的元素。对于数字来说,这就是最大的数字。
integers.pop(); // integers = {10, 5, 3}
cout << integers.top();Output:
10我们可以更改队列的优先级规则,从而改变元素的排序方式。例如,我们可以像下面这样声明一个按升序排列整数的优先队列:
priority_queue<int, vector<int>, greater<int> > integers;在这个队列中,插入的元素会按升序排列。使用 pop() 方法查看顶部元素或将其移除时,显示或移除的将是最小的数字。
目前,你不必纠结于如何以不同方式使用优先队列或更改优先级。只要记住,我们可以使用这种数据结构,根据某种优先级对元素进行排序。
优先队列方法
| 方法 | 功能 |
size() | 返回队列中的元素数量 |
empty() | 如果队列为空,则返回 true,否则返回 false |
swap() | 将一个队列的内容与另一个队列的内容交换 |
挑战
简单从输入中给定一个数 N。接下来的 N 行中,每行会给出一个数字。使用优先队列,按从大到小(降序)输出输入的数字。
Input
5
10
50
20
40
30Output
50 40 30 20 10亲手试试
#include <queue>
#include <iostream
using namespace std;
int main()
{
// Enter your code here
return 0;
}C++ 标准模板库中的所有课
自己练习: C++ 在线编译器