C++之priority_queue容器

priority_queue 是 C++ STL (Standard Template Library) 中的一种容器适配器,用于实现优先队列。优先队列是一种特殊的队列,其中每个元素都有一个优先级,元素的出队顺序取决于其优先级,而不是插入顺序。默认情况下,优先队列是一个最大堆,即优先级最高的元素(通常是最大的元素)会被首先处理。

主要特点

  1. 优先级:每个元素都有一个优先级,出队顺序取决于优先级。
  2. 最大堆:默认情况下,优先队列是一个最大堆,优先级最高的元素(最大的元素)会被首先处理。
  3. 基本操作:提供 pushpoptopempty 和 size 等基本操作。
  4. 容器适配器priority_queue 是一个容器适配器,可以基于不同的底层容器实现,默认情况下使用 vector

常用操作

定义和初始化
#include <queue>std::priority_queue<int> pq; // 创建一个空的 priority_queue 容器,默认为最大堆
std::priority_queue<int, std::vector<int>, std::greater<int>> min_pq; // 创建一个最小堆的 priority_queue
插入元素
pq.push(1); // 插入元素 1
pq.push(3); // 插入元素 3
pq.push(2); // 插入元素 2
移除元素
pq.pop(); // 移除优先级最高的元素
访问优先级最高的元素
if (!pq.empty()) {std::cout << "Top element: " << pq.top() << std::endl; // 访问优先级最高的元素
} else {std::cout << "Priority queue is empty." << std::endl;
}
检查优先队列是否为空
if (pq.empty()) {std::cout << "Priority queue is empty." << std::endl;
} else {std::cout << "Priority queue is not empty." << std::endl;
}
获取优先队列的大小
std::cout << "Priority queue size: " << pq.size() << std::endl;
示例代码

以下是一个完整的示例,展示了如何使用 priority_queue

#include <iostream>
#include <queue>int main() {std::priority_queue<int> pq; // 创建一个最大堆的 priority_queue// 插入元素pq.push(1);pq.push(3);pq.push(2);// 输出优先级最高的元素while (!pq.empty()) {std::cout << "Top element: " << pq.top() << std::endl;pq.pop();}// 创建一个最小堆的 priority_queuestd::priority_queue<int, std::vector<int>, std::greater<int>> min_pq;// 插入元素min_pq.push(1);min_pq.push(3);min_pq.push(2);// 输出优先级最高的元素while (!min_pq.empty()) {std::cout << "Top element (min heap): " << min_pq.top() << std::endl;min_pq.pop();}return 0;
}

自定义比较函数

如果你需要自定义优先级的计算方式,可以提供一个自定义的比较函数或对象。例如,假设你有一个自定义的结构体:

#include <queue>
#include <string>struct Person {std::string name;int age;bool operator<(const Person& other) const {return age < other.age; // 按年龄从小到大排序}
};int main() {std::priority_queue<Person> pq;// 插入元素pq.push({"Alice", 30});pq.push({"Bob", 25});pq.push({"Charlie", 35});// 输出优先级最高的元素while (!pq.empty()) {std::cout << "Top element: " << pq.top().name << ", " << pq.top().age << std::endl;pq.pop();}return 0;
}

总结

priority_queue 是一个非常有用的数据结构,适用于需要根据优先级处理元素的场景。常见的应用场景包括任务调度、事件处理、Dijkstra 最短路径算法等。由于 priority_queue 是一个容器适配器,你可以选择不同的底层容器来实现它,以适应不同的性能需求。默认情况下,priority_queue 使用 vector 作为底层容器,因为它在大多数情况下提供了良好的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven的安装配置

文章目录 一、MVN 的下载二、配置maven2.1、更改maven/conf/settings.xml配置2.2、配置环境变量一、MVN 的下载 还是那句话,要去就去官网或者github,别的地方不要去下载。我们下载binaries/ 目录下的 cd /opt/server wget https://downloads.apache.org/maven/maven-3/3.9.6/…

构建Java教学新生态:SpringBoot应用实例

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

C#如何锁定和解除鼠标及键盘BlockInput

在C#中&#xff0c;"BlockInput"通常指的是一个功能或方法&#xff0c;用于阻止或暂停用户输入一段时间。这在某些特定的应用场景下非常有用&#xff0c;比如在游戏中防止玩家连续快速点击导致游戏逻辑错误&#xff0c;或者在UI应用中防止用户在某个操作正在进行时进…

flex安装学习笔记

https://zhuanlan.zhihu.com/p/2783726096 3.下载 Flux 模型 FLUX.1 [dev] &#xff1a;官方版本满配版&#xff0c;最低显存要求 24G&#xff1b;FLUX.1 [dev] fp8&#xff1a;大佬优化 [dev] 后版本&#xff0c;建议选择此版本&#xff0c;最低 12G 显存可跑&#xff1b;FLU…

ctfshow(316)--XSS漏洞--反射性XSS

Web316 进入界面&#xff1a; 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题&#xff0c;看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台&#xff0c;显示的cookie还是这样…

【设计模式系列】建造者模式(十)

目录 一、什么是建造者模式 二、建造者模式的角色 三、建造者模式的典型应用 四、建造者模式在StringBuilder中的应用 五、典型建造者模式的案例 一、什么是建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;用于构建复杂对…

NVR批量管理软件/平台EasyNVR多个NVR同时管理的智能化革新

随着安防监控技术的不断进步和普及&#xff0c;视频监控系统在各行各业中的应用愈发广泛。无论是大型企业、工业园区&#xff0c;还是公共场所、住宅小区&#xff0c;视频监控都成为了保障安全、提升管理效率的重要手段。 NVR批量管理软件/平台EasyNVR&#xff0c;作为一款集多…

【公司新闻】实力出圈!开放传神(OpenCSG)登上《IT时报》!

2024年11月1日&#xff08;星期五&#xff09;&#xff0c;《IT时报》刊登了关于开放传神&#xff08;以下简称&#xff1a;OpenCSG&#xff09;的新闻内容&#xff0c;这期报道究竟揭示了哪些亮点&#xff1f;让我们一起来深入了解。 来源&#xff1a;《 IT时报 》 本报记者 &…

python的安装环境Miniconda(Conda 命令管理依赖配置)

这一段时间&#xff0c;对AI大模型 有了兴趣就想研究一下。 在研究之前肯定要先把需要的编程技能掌握了。经过我查阅资料&#xff0c;今天就先学一下 python的 环境安装。 Node.js 包管理工具&#xff1a;npm 依赖配置文件&#xff1a;package.json 环境管理&#xff1a;nvm&am…

在 Sass 中使用 Mixins

在 Sass 中使用 Mixins 如果您是深入研究前端开发领域的人,那么您很有可能遇到过Sass(Syntactically Awesome Stylesheets)。Sass 是一个功能强大的 CSS 预处理器,它通过提供变量、嵌套、函数和 mixins等功能来增强您的 CSS 工作流程。在这些功能中,mixins脱颖而出,成为…

初级图像处理工具

图像处理-初级 1、功能概览 初级图像处理工具旨在为用户提供一个易于使用的界面来执行常见的图像处理任务。该工具集成了多项实用功能&#xff0c;从显示和调整图像的基本属性到应用各种滤镜效果&#xff0c;用户都可以通过简单的命令行交互来完成。 我们的初级图像处理工具…

【docker】5. 背景知识(了解)

Docker 是什么 Docker 本质 Docker 本质其实是 LXC 之类的增强版&#xff0c;它本身不是容器&#xff0c;而是容器的易用工具。容器是 linux 内核中的技术&#xff0c;Docker 只是把这种技术在使用上简易普及了。Docker 在早期的版本其核心就是 LXC 的二次封装发行版。 Docke…

【react框架之dvajs】如何创建一个初始的dva项目工程

dvajs作为react的框架&#xff0c;一度火爆市场&#xff0c;只是新框架层出不穷&#xff0c;也是越做越成熟了&#xff0c;很多老的框架被淹没&#xff0c;使用的越来越少。dva框架还是有不少的公司有项目在使用&#xff01; dva项目的搭建步骤 在系统检测是否安装了dva&…

5分钟科普:AI网关是什么?应用场景是什么?有没有开源的选择?

AI网关的功能及其定义 AI网关位于企业应用与内外部大模型调用的交汇点&#xff0c;能够灵活地将请求转发给内部自建模型或外部大模型服务提供商&#xff0c;甚至海外的服务商。它管理着企业所有的AI出口流量&#xff0c;为企业内的不同团队提供了多方面的优势。 对于开发团队…

Spring中的 InitializingBean、BeanPostProcessor、@PostConstruct 等初始化动作的执行时机分析

初始化Bean的时序图如下&#xff1a; 小结说明&#xff1a; 1、相同点&#xff1a;InitializingBean 的(afterPropertiesSet方法)、BeanPostProcessor、PostConstruct 都是在bean的属性注入完毕之后才执行&#xff0c;都可以用来进行bean的初始化动作 2、初始化执行顺序优先级…

java ssm 校园快递物流平台 校园快递管理系统 物流管理 源码 jsp

一、项目简介 本项目是一套基于SSM的校园快递物流平台&#xff0c;主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本、软件工具等。 项目都经过严格调试&#xff0c;确保可以运行&#xff01; 二、技术实现 ​后端技术&#x…

最新整理:Selenium自动化测试面试题

1.selenium中如何判断元素是否存在? find_elements查找到的元素个数为0&#xff0c;find_element报错意味着元素不存在 2.如何判断元素是否出现? 判断元素是否出现&#xff0c;存在两种情况&#xff0c;一种是该元素压根就没有&#xff0c;自然不会出现;另外一种是有这样的…

【The Art of Unit Testing 3_自学笔记06】3.4 + 3.5 单元测试核心技能之:函数式注入与模块化注入的解决方案简介

文章目录 3.4 函数式依赖注入技术 Functional injection techniques3.5 模块化依赖注入技术 Modular injection techniques 写在前面 上一篇的最后部分对第三章后续内容做了一个概括性的梳理&#xff0c;并给出了断开依赖项的最简单的实现方案&#xff0c;函数参数值注入法。本…

用Puppeteer点击与数据爬取:实现动态网页交互

用Puppeteer与代理IP抓取51job招聘信息&#xff1a;动态网页交互与数据分析 引言 在数据采集领域&#xff0c;传统的静态网页爬虫方式难以应对动态加载的网页内容。动态网页通常依赖JavaScript加载数据&#xff0c;用户需要与页面交互才能触发内容显示。因此&#xff0c;我们…

10天进阶webpack---(1)为什么要有webpack

首先就是我们的代码是运行在浏览器上的&#xff0c;但是我们开发大多都是利用node进行开发的&#xff0c;在浏览器中并没有node提供的那些环境。这就造成了运行和开发上的不同步问题。 -----引言 浏览器模块化的问题&#xff1a; 效率问题&#xff1a;精细的模块划分带来了更…