C++ Priority Queue2025 年 8 月 29 日 | 阅读 9 分钟 在 C++ 中,优先级队列是 STL 中一个派生的容器,它只考虑最高优先级的元素。普通队列遵循 FIFO(先进先出)策略,而优先级队列则根据优先级弹出元素,即最高优先级的元素首先被弹出。 在某些方面,它与普通队列相似,但在以下方面有所不同:
语法它具有以下语法: 在这个语法中,
优先级队列容器提供了二叉堆数据结构的内置实现。这些可以是两种类型的堆。 1)最大堆优先级队列(默认)在最大堆优先级队列中,值最大的元素拥有最高的优先级,并最先被访问。这是 C++ 中 std::priority_queue 的默认行为。 语法 它具有以下语法: 在这个语法中,
最大堆优先级队列示例让我们举一个简单的例子来说明 C++ 中的最大堆优先级队列。 示例编译并运行输出 Elements in max-heap order: 30 20 10 5 说明 在此示例中,priority_queue<int> 内部使用 std::less<int>。最大的元素(30)具有最高的优先级。元素按值递减的顺序打印。 2)最小堆优先级队列(自定义比较器)在最小堆优先级队列中,值最小的元素拥有最高的优先级,并最先被访问。我们可以使用自定义比较器(如 std::greater)来实现这一点。 语法 它具有以下语法: 在这个语法中,
最小堆优先级队列示例让我们举一个例子来说明 C++ 中优先级队列的最小堆。 示例编译并运行输出 Elements in min-heap order: 5 10 20 30 说明 第三个模板参数 std::greater<int> 将行为更改为最小堆。最小的元素(5)获得最高的优先级。元素按值递增的顺序打印。 让我们通过一个简单的例子来理解优先级队列。 ![]() 在上面的说明中,我们使用 push() 函数插入了元素,插入操作与普通队列相同。但是,当我们使用 pop() 函数从队列中删除元素时,优先级最高的元素将被首先删除。 优先级队列的基本操作C++ 中优先级队列的几个基本操作如下: 1)插入元素在优先级队列中,push() 方法用于插入元素。由于它会自动将最重要的方面(默认情况下是最大的)置于顶部,因此在每次插入过程中,堆属性都会保持不变。 2)访问顶部元素top() 函数根据其默认的最大值优先级从优先级队列中提取最大元素。优先级队列允许用户以 O(1) 的恒定时间操作访问最大元素,而无需删除它。top() 函数使我们能够在执行 pop() 函数等操作之前查看最大值。 插入和访问顶部元素示例让我们举一个例子来说明如何在优先级队列中插入和访问元素。 示例编译并运行输出 Maximum element: 90 说明 在此示例中,优先级队列按此顺序接收元素 70、60、90 和 55。由于 max-heap 排序,90 自动成为顶部元素。pq.top() 的正确执行返回 90,因为队列在其操作中实现了元素优先级排序。 3)删除顶部元素pop() 函数用于根据优先级级别删除优先级队列前端(顶部元素)。用户应首先使用 top() 函数检索被删除的元素,因为 pop() 不返回任何对象。队列系统处理下一个最大的元素,该元素会自动占据顶部选择的位置。 优先级队列中删除顶部元素示例让我们举一个例子来说明如何删除优先级队列中的顶部元素。 示例编译并运行输出 Before pop, top: 35 After pop, new top: 25 说明 priority_queue 接收元素 15、35 和 25。在执行 pop() 函数之前,由于其大小最大,priority_queue 将 35 作为最高元素。pop() 操作从队列中移除 35,导致 25 成为最高优先级元素。 4)遍历(伪遍历)优先级队列不像向量或列表那样提供直接的遍历访问。访问所有元素的流程始于 top(),然后立即进行 pop() 操作。由于优先级队列默认作为最大堆结构运行,因此元素的打印顺序是降序的。 优先级队列中的 C++ 遍历示例让我们举一个例子来说明 C++ 中优先级队列的遍历。 示例编译并运行输出 Elements in descending order: 30 20 10 说明 在此示例中,插入了值 20、10 和 30。之后,由于其队列设计,优先级队列的顶部是最大的元素。程序继续处理下一个最大的值 20,然后打印 10。打印顺序对于所有元素都遵循降序。 5)更改优先级队列顺序C++ 开发者可以通过定义自定义比较器来更改应用程序中的优先级队列顺序。C++ 优先级队列的默认操作建立最大堆行为,使高优先级元素在数据结构中保持较高位置。自定义比较器使我们能够将优先级队列从默认的最大堆类型转换为最小堆或任何自定义优先级方案。 更改优先级队列顺序示例让我们举一个例子来说明如何在 C++ 中更改优先级队列顺序。 示例编译并运行输出 Top element (min-heap): 10 说明 使用 greater<int> 函数将程序中的默认最大堆转换为最小堆。最小堆的顶部包含内部的最小元素。处理队列后,输出显示 10,因为它代表优先级队列中存储的最小元素。 时间复杂度
优先级队列的成员函数C++ 中优先级队列的几个成员函数如下:
C++ 优先级队列示例让我们再看一个 C++ 优先级队列的例子。 示例编译并运行输出 Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1 说明 在上面的代码中,我们声明了两个优先级队列,即 p 和 q。我们在 'p' 优先级队列中插入了四个元素,在 'q' 优先级队列中插入了四个元素。插入元素后,我们使用 swap() 函数将 'p' 队列的元素与 'q' 队列交换。 优先级队列的目的C++ 中优先级队列的几个用途如下:
结论总而言之,C++ 优先级队列提供了数据结构,允许开发人员高效地检索最大或最小优先级元素。通过使用 STL 优先级队列,开发人员可以构建用于调度应用程序、查找系统和资源分配过程的堆。优先级队列中插入和删除数据的复杂度为 O(log n),这使其成为性能敏感型应用程序的理想选择。 C++ 优先级队列选择题1)C++ 中 priority_queue 的默认行为是什么?
答案: c) 首先返回优先级最高的元素 2)如何改变 C++ priority_queue 的默认行为,使其首先访问最小的元素?
答案: b) 实现需要自定义比较器。 3)从概念上讲,优先级队列与标准队列有何不同?
答案: d) 优先级队列通过优先级排序而不是到达顺序来确定元素处理的顺序。 4)为什么优先级队列在算法设计中很重要?
答案: a) 系统使用优先级队列对优先级项目进行有效的任务管理。 5)比较器在优先级队列中的主要目的是什么?
答案: c) 该机制有助于决定哪些元素优先。 下一主题C++ Deque |
s 在 C++ 中,vector 是标准模板库(STL)的一部分。它们是动态数组,在添加或删除元素时可以自动调整大小。与具有固定大小的数组不同,vector 提供了广泛的灵活性和底层函数,这些函数……
11 分钟阅读
在 C++ 中,std::list 是一个序列容器,它允许元素的非连续存储。它实现为双向链表,其中每个元素包含前一个和后一个列表元素的地址。它允许我们将数据存储在……
阅读 15 分钟
函数 C++ 中,标准模板库 (STL) 在 <<algorithm> 头文件中提供了强大的底层函数集合。这些函数有助于对数组、向量、列表和其他容器等序列执行各种操作。算法函数是通用的,并且操作迭代器,...
阅读 24 分钟
在 C++ 中,multimap 是 C++ STL(标准模板库)的一部分。Multimap 是像 map 一样的关联容器,它们存储排序的键值对,但与只存储唯一键的 map 不同,multimap 可以有重复的键。默认情况下,它使用 (<) 运算符进行比较……
阅读 13 分钟
在 C++ 中,bitset 是一个包含固定大小位序列(0 和 1)的容器。它使我们能够有效地管理和操作固定大小的位序列。它适用于低级操作、内存高效存储和位逻辑。它实现为……
11 分钟阅读
教程 编译器 程序 面向对象编程 STL 面试题 C++ STL (标准模板库) 在 C++ 中,标准模板库 (STL) 是一组强大的模板类和函数,提供了通用的数据...
阅读 13 分钟
在 C++ 中,map 是 STL(标准模板库)的一部分。Map 是关联容器,它们存储排序的键值对,其中每个键都是唯一的,可以插入或删除,但不能修改。与键相关联的值可以更改。语法是……
阅读 13 分钟
在 C++ 中,deque(双端队列)是一种队列,其中可以在队列的前端和后端添加和删除元素。它支持 FIFO 和 LIFO 操作,这比队列提供了更大的灵活性。在 C++ 中,STL deque 是一个序列容器,它……
11 分钟阅读
在 C++ 中,队列代表基本数据结构,它们根据先进先出(FIFO)逻辑运行。C++ 的标准模板库(STL)通过其现成的组件提供了一个队列类,这些组件可提高队列操作的效率。队列是一种线性数据结构,它通过队列处理元素……
11 分钟阅读
C++ STL Set 在 C++ 中,set 代表基本数据结构,它以某种排序顺序排列唯一元素并存储它们。集合称为关联容器,唯一排序的元素称为排序键。我们可以插入或……
阅读9分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India