当前位置: 首页 > news >正文

prority_queue的学习

优先级队列(Priority Queue)是一种抽象数据类型,它类似于普通的队列或堆栈,但每个元素都有一个关联的优先级,这个优先级决定了元素在队列中的位置和被访问的顺序。在优先级队列中,具有最高优先级的元素通常最先被访问,而具有较低优先级的元素会在后面被访问。

在C++ STL中,priority_queue通常使用std::vector作为默认的底层容器来存储元素。这意味着``priority_queue使用std::vector来管理元素并维护堆的性质,而不是直接使用二叉树结构。

std::vector是一个动态数组,它提供了高效的随机访问和插入操作,这使得它成为priority_queue的合适底层数据结构,因为堆操作需要能够在O(log n)时间内插入元素并在O(1)时间内访问堆顶元素。

当你向其中输入数据时,它默认是以大堆的方式来存储数据的。

优先级队列的用法
优先级队列(Priority Queue)是一种非常有用的数据结构,它允许你以有序的方式管理和处理具有不同优先级的元素。在C++中,你可以使用STL提供的std::priority_queue来操作优先级队列。以下是std::priority_queue的常见用法示例:

首先,你需要包含相应的头文件:

#include <iostream>
#include <queue> //prority_queue 也在这个头文件中

然后,你可以使用std::priority_queue来定义一个优先级队列。默认情况下,它是最大堆,也就是元素值大的具有更高的优先级。

std::priority_queue<int> maxHeap;

如果你想创建一个最小堆,可以提供第二个参数,使用std::greater来定义比较函数:

std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;

接下来,你可以使用以下操作来操作优先级队列:

  1. 插入元素:使用push方法将元素插入优先级队列。
maxHeap.push(5);
maxHeap.push(2);
maxHeap.push(8);
  1. 弹出元素:使用pop方法弹出队列中优先级最高的元素。
maxHeap.pop();
  1. 查看队列顶部元素:使用top方法查看队列中具有最高优先级的元素,但不会将其弹出。
int topElement = maxHeap.top();
  1. 判断队列是否为空:使用empty方法来检查队列是否为空。
bool isEmpty = maxHeap.empty();
  1. 获取队列中的元素数量:使用size方法来获取队列中的元素数量。
int size = maxHeap.size();

下面是一个完整的示例,演示了如何使用std::priority_queue创建和操作一个最大堆的优先级队列:

#include <iostream>
#include <queue>int main() {std::priority_queue<int> maxHeap;maxHeap.push(5);maxHeap.push(2);maxHeap.push(8);while (!maxHeap.empty()) {int topElement = maxHeap.top();std::cout << topElement << " ";maxHeap.pop();}return 0;
}

这个示例中,我们首先将元素插入最大堆,然后使用toppop操作获取并弹出队列中的元素,以得到按降序排列的输出。

解释:std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;

这行代码定义了一个名为 minHeap 的优先级队列,其中包含整数类型的元素,并且它是一个最小堆(Min Heap)。让我来逐个解释这段代码的各个部分:

  1. std::priority_queue<int, ...>:这部分定义了一个优先级队列对象,并指定了其元素类型为整数(int)。这表示 minHeap 中的元素将是整数类型的。

  2. std::vector<int>:这是一个模板参数,指定了底层容器的类型。在这里,我们使用 std::vector 作为底层容器,用来存储优先级队列的元素。

  3. std::greater<int>:这是另一个模板参数,它指定了比较函数。在这里,我们使用 std::greater<int>,它是一个函数对象,表示将元素按照递增的顺序排序,从而创建了一个最小堆。这意味着具有较小值的元素在队列中具有更高的优先级。

所以,std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap; 这行代码创建了一个最小堆的优先级队列 minHeap,用于存储整数类型的元素,并且元素将按照升序排列,使得最小的元素具有最高的优先级。你可以使用这个队列来执行插入、弹出、查看顶部元素等操作,以确保元素按照最小值的顺序被处理。

http://www.lryc.cn/news/183383.html

相关文章:

  • 【vue3】toRef与toRefs的使用,toRef与ref的区别
  • 信息论基础第二章部分习题
  • 信息化发展73
  • 560. 和为 K 的子数组
  • 24 mysql all 查询
  • 【Excel单元格数值统计】python实现-附ChatGPT解析
  • 爬虫项目实战——爬取B站视频
  • 关掉在vscode使用copilot时的提示音
  • 【有限域除法】二元多项式除法电路原理及C语言实现
  • RabbitMQ核心总结
  • Unicode与UTF-8
  • A : DS单链表--类实现
  • React Hooks —— ref hooks
  • 泛型与Gson解析
  • c++使用ifstream和ofstream报错:不允许使用不完整的类型
  • 调试器通用波形显示工具
  • Linux中getopt函数、optind等变量使用详解
  • RDP协议流程详解(二)Basic Settings Exchange 阶段
  • 实时人脸五观检测:基于libfacedetection(CNN模型)
  • 图像和视频上传平台Share Me
  • JavaScript 在前端开发中有什么应用?
  • 【沐风老师】推荐2023年3DMAX的10个最佳插件!
  • 【visual studio 小技巧】项目属性->生成->事件
  • 每日一题 279完全平方数(完全背包)
  • 创意中秋与国庆贺卡 - 用代码为节日增添喜悦
  • 专业综合课程设计 - 优阅书城项目(第一版)
  • 【剑指Offer】13.机器人的运动范围
  • 【Qt基础篇】信号和槽
  • .netCore用DispatchProxy实现动态代理
  • 好奇喵 | Tor浏览器——访问.onion网址,揭开Dark Web的神秘面纱