Menu
CoddyTech

优先队列

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()将一个队列的内容与另一个队列的内容交换
challenge icon

挑战

简单

从输入中给定一个数 N。接下来的 N 行中,每行会给出一个数字。使用优先队列,按从大到小(降序)输出输入的数字。

 

Input
5
10
50
20
40
30
Output
50 40 30 20 10

亲手试试

#include <queue>
#include <iostream

using namespace std;

int main()
{
    // Enter your code here

    return 0;
}

C++ 标准模板库中的所有课

自己练习: C++ 在线编译器