热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优先队列——Priority_Queue详解

一、入门介绍1、优先队列是一种特殊的队列,这种队列会自动的把队列里的数排序(默认从大到小,使用“

一、入门介绍

&#xff11;、 优先队列是一种特殊的队列&#xff0c;这种队列会自动的把队列里的数排序(默认从大到小&#xff0c;使用“<”判断),而且还可以把数按照特定的方法排列&#xff01;(包括结构体和重载"<")
&#xff12;、 优先队列的头文件&#xff0c;需要包括&#xff1a;

#include
using namespace std;

声明&#xff1a; 一个优先队列声明的基本格式是&#xff1a;

priority_queue<结构类型> 队列名; 比如&#xff1a;
priority_queue i;
priority_queue d;

不过&#xff0c;我们最为常用的是这几种&#xff1a;

priority_queue q;//node是一个结构体//结构体里重载了‘<’小于符号
priority_queue ,greater > q; // 从小到大排序&#xff08;数组&#xff09;priority_queue ,less >q;   // 从大到小排序//不需要#include头文件//注意后面两个“>”不要写在一起&#xff0c;“>>”是右移运算符

二、优先队列的基本操作&#xff1a;

&#xff11;、以一个名为q的优先队列为例&#xff1a;

q.size();     //返回q里元素个数
q.empty();    //返回q是否为空&#xff0c;空则返回1&#xff0c;否则返回0
q.push(k);    //在q的末尾插入k
q.pop();     //删掉q的第一个元素
q.top();     //返回q的第一个元素
q.back();    //返回q的末尾元素

&#xff12;、优先队列的特性
自动排序。
怎么个排法呢&#xff1f; 在这里介绍一下&#xff1a;
(1)、默认的优先队列&#xff08;非结构体结构&#xff09;

priority_queue q;

简单操作:


#include
#include
using namespace std;
priority_queue q;
int main()
{q.push(10),q.push(8),q.push(12),q.push(14),q.push(6);while(!q.empty())printf("%d ",q.top()),q.pop();
}

程序大意就是在这个优先队列里依次插入10、8、12、14、6&#xff0c;再输出。
结果是什么呢&#xff1f;
14 12 10 8 6
也就是说&#xff0c;它是按从大到小排序的&#xff01;
(2)、默认的优先队列&#xff08;结构体&#xff0c;重载小于&#xff09;
        先看看这个结构体是什么。

struct node
{int x,y;bool operator <(const node & a) const{return x};

这个node结构体有两个成员&#xff0c;x和y&#xff0c;它的小于规则是x小者小。
再来看看验证程序&#xff1a;

#include
#include
using namespace std;struct node
{int x,y;bool operator <(const node & a) const{return x}k;priority_queue q;int main()
{k.x&#61;10,k.y&#61;100; q.push(k);k.x&#61;12,k.y&#61;60; q.push(k);k.x&#61;14,k.y&#61;40; q.push(k);k.x&#61;6,k.y&#61;80; q.push(k);k.x&#61;8,k.y&#61;20; q.push(k);while(!q.empty()){node m&#61;q.top(); q.pop();printf("(%d,%d) ",m.x,m.y);}
}

(3)、less和greater优先队列&#xff08;多使用这一个&#xff09;
还是以int为例&#xff0c;先来声明&#xff1a;

priority_queue ,less > p;    // 数组从大到小排序priority_queue ,greater > q;  // 从小到大排序

CODE:

#include
#include
using namespace std;priority_queue ,less > p;
priority_queue ,greater > q;int a[5]&#61;{10,12,14,6,8};int main()
{for(int i&#61;0;i<5;i&#43;&#43;)p.push(a[i]),q.push(a[i]);printf("less:")while(!p.empty())printf("%d ",p.top()),p.pop(); pritntf("\ngreater:")while(!q.empty())printf("%d ",q.top()),q.pop();
}

结果&#xff1a;

less:14 12 10 8 6
greater:6 8 10 12 14

所以&#xff0c;我们可以知道&#xff0c;less是从大到小&#xff0c;greater是从小到大。


推荐阅读
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 在幼儿园中,有 \( n \) 个小朋友需要通过投票来决定是否午睡。尽管这个问题对每个孩子来说并不是特别重要,但他们仍然希望通过谦让的方式达成一致。每个人都有自己的偏好,但为了集体和谐,他们决定采用一种最小割的方法来解决这一问题。这种方法不仅能够确保每个人的意愿得到尽可能多的尊重,还能找到一个最优的解决方案,使整体满意度最大化。 ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 本研究基于状态空间方法,通过动态可视化技术实现了汉诺塔问题的求解过程,即将n个盘子从A柱移动到C柱。本文提供了一个使用C语言在控制台进行动画绘制的示例,并详细注释了程序逻辑,以帮助读者更好地理解和学习该算法。 ... [详细]
  • Codeforces 1065D 解题心得与代码实现分析 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 在Unity3D的第13天学习中,我们深入探讨了关节系统和布料模拟技术。关节系统作为Unity中的关键物理组件,能够实现游戏对象间的动态连接,如刚体间的关系、门的开合动作以及角色的布娃娃效果。铰链关节涉及两个刚体的交互,能够精确模拟复杂的机械运动,为游戏增添了真实感。此外,布料模拟技术则进一步提升了角色衣物和环境装饰物的自然表现,增强了视觉效果的真实性和沉浸感。 ... [详细]
  • 本文详细解析了LeetCode第40题“组合总和 II”的算法思路与优化方法。题目要求从给定的数组 `candidates` 中找出所有可能的组合,使得这些组合中的数字之和等于目标值 `target`。文章不仅介绍了基本的回溯算法,还探讨了如何通过剪枝技术提高算法效率,以应对大规模数据输入。 ... [详细]
  • 题目旨在解决树上的路径最优化问题,具体为在给定的树中寻找一条长度介于L到R之间的路径,使该路径上的边权平均值最大化。通过点分治策略,可以有效地处理此类问题。若无长度限制,可采用01分数规划模型,将所有边权减去一个常数m,从而简化计算过程。此外,利用单调队列优化动态规划过程,进一步提高算法效率。 ... [详细]
  • 在启用分层编译的情况下,即时编译器(JIT)的触发条件涉及多个因素,包括方法调用频率、代码复杂度和运行时性能数据。本文将详细解析这些条件,并探讨分层编译如何优化JVM的执行效率。 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • 在iOS平台上,应用的流畅操作体验一直备受赞誉。然而,过去开发者往往将更多精力集中在功能实现上,而对性能优化的关注相对较少。本文深入探讨了iOS应用性能优化的关键要点与实践方法,旨在帮助开发者提升应用的响应速度、降低功耗,并改善整体用户体验。通过具体案例分析和技术解析,文章提供了实用的优化策略,包括代码层面的改进、资源管理优化以及界面渲染效率的提升等。 ... [详细]
author-avatar
会展小控
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有