STL - priority_queue(优先队列)

STL之优先队列priority_queue(C++) 文章目录1、优先队列(priority_queue)的定义2、元素自定义类型的优先队列(priority_queue)3、优先队列(priority_queue)的主要成员函数(1)优先队列主要的三个成员函数 1、优先队列(priority_queue)的定义 优先队列是一种抽象数据类型,其元素根据优先级被读取。 运用 priority_queue, 必须声明请头文件:#include <queue>。 priority_queue 声明:如声明一个元素类型为整型的 priority_queue 阅读详情

参考:http://www.cnblogs.com/xzxl/p/7266404.html

一、基本定义:

优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大到小的顺序排序。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则。

优先级队列可以用向量(vector)或双向队列(deque)来实现(注意list container不能用来实现queue,因为list的迭代器不是任意存取iterator,而pop中用到堆排序时是要求randomaccess iterator 的!):
priority_queue<vector<int>, less<int> > pq1;     // 使用递增less<int>函数对象排序
priority_queue<deque<int>, greater<int> > pq2;   // 使用递减greater<int>函数对象排序
其成员函数有“判空(empty)” 、“尺寸(Size)” 、“栈顶元素(top)” 、“压栈(push)” 、“弹栈(pop)”等。

二、用途
最短路算法优化, 斜率DP优化等

三、代码实现&基本操作

///优先队列的基本使用
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

///自定义优先级方法1,定义结构,使用运算符重载

struct cmp1
{
    bool operator ()(int &a, int &b)
    {
        return a > b; //最小值优先(是“>" 注意别与排序搞混)
    }
};

struct cmp2
{
    bool operator ()(int &a, int &b)
    {
        return a < b; //最大值优先
    }
};

///自定义优先级方法2,定义结构,使用运算符重载

struct numb_1
{
    int x;
    bool operator < (const numb_1 &a) const {
        return x > a.x; //最小值优先(与前面的联系记忆)
    }
};

struct numb_2
{
    int x;
    bool operator < (const numb_2 &a) const {
        return x < a.x; //最大值优先
    }
};

///测试用数据
int a[] = {2, 520, 30, 18, 4, 1314, 98, 0};
numb_1 num1[] = {2, 520, 30, 18, 4, 1314, 98, 0}; //用于自定义方法2
numb_2 num2[] = {2, 520, 30, 18, 4, 1314, 98, 0}; //用于自定义方法2

int main()
{
    ///采用默认优先级
    priority_queue<int> que; //(由大到小)构造队列(最单纯的优先队列)


    ///自定义优先级方法1
    priority_queue<int, vector<int>,cmp1> que1; //最小值优先
    priority_queue<int, vector<int>,cmp2> que2; //最大值优先


    ///使用系统的函数
    //(注意最后的括号,不是“<<”, 因为”<<“是右移运算符
    priority_queue<int, vector<int>, greater<int> > que3; //最小值优先
    priority_queue<int, vector<int>, less<int> > que4; //最大值优先


    ///自定义优先级方法2
    priority_queue<numb_1> que5; //最小值优先
    priority_queue<numb_2> que6; //最大值优先

    ///Let's begin

    ///入队操作
    for(int i = 0; a[i]; i++)
    {
        que.push(a[i]);
        que1.push(a[i]);
        que2.push(a[i]);
        que3.push(a[i]);
        que4.push(a[i]);
    }
    for(int i = 0; num1[i].x; i++)
        que5.push(num1[i]);
    for(int i = 0; num2[i].x; i++)
        que6.push(num2[i]);


    ///输出结果
    printf("采用默认优先级:\n");
    printf("(priority_queue<int>que;)\n");
    printf("Que 0:\n");
    while(!que.empty()) //判断是否为空
    {
        printf("%d ", que.top()); //队首元素
        que.pop(); //出队
    }
    puts("");
    puts("");


    printf("采用结构体自定义优先级方式一:\n");
    printf("(priority_queue<int,vector<int>,cmp>que;)\n");
    printf("Que 1:\n");
    while(!que1.empty()){
        printf("%d ",que1.top());
        que1.pop();
    }
    puts("");
    printf("Que 2:\n");
    while(!que2.empty()){
        printf("%d ",que2.top());
        que2.pop();
    }
    puts("");
    puts("");


    printf("采用头文件\"functional\"内定义优先级:\n");
    printf("(priority_queue<int,vector<int>,greater<int>/less<int> >que;)\n");
    printf("Que 3:\n");
    while(!que3.empty()){
        printf("%d ",que3.top());
        que3.pop();
    }
    puts("");
    printf("Que 4:\n");
    while(!que4.empty()){
        printf("%d ",que4.top());
        que4.pop();
    }
    puts("");
    puts("");


    printf("采用结构体自定义优先级方式二:\n");
    printf("(priority_queue<number>que)\n");
    printf("Que 5:\n");
    while(!que5.empty()){
        printf("%d ",que5.top());
        que5.pop();
    }
    puts("");
    printf("Que 6:\n");
    while(!que6.empty()){
        printf("%d ",que6.top());
        que6.pop();
    }
    puts("");
    return 0;

}

 

无锁队列详细分解.pdf 无锁队列 立即下载

相关推荐

基于大模型的脑疝全流程预测与诊疗方案研究

目录一、引言1.1 研究背景与目的1.2 研究意义1.3 大模型技术概述二、脑疝概述2.1 定义与分类2.2 发病机制与病因2.3 临床表现2.4 诊断方法三、大模型在脑疝预测中的应用3.1 数据采集与预处理3.2 模型训练与选择3.3 模型验证与优化四、术前预测与评估4.1 病情严重程度预测4.2 手术风险预测4.3 个性化手术方案制定4.4 麻醉方案制定五、术中监测与决策5.1 实时监测指标5.2 大模型辅助决策5.3 应对突发情况六、术后评估与护理6.1 术后恢复情况评估6.2 并发症风险预测与预防6

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1286

leetcode 347. Top K Frequent Elements(优先队列的使用)

算法思路: 首先,将每个数出现的频率以键值对的方式存入HashMap中。创建一个优先队列,队列中的元素是数字和该数字出现的频率组合的信息对,为此,我特地创建了一个信息对的类(C++提供了,java貌似没有提供),不过也挺简单的,当是学习吧。需要重写比较器,使得进队后信息对是按频率从小到大排序(底层是一个最小堆)。然后利用迭代器遍历整个HashMap,当队列长度等于k时,我们需要维护这个优先队列使其...

IT_BOY__的博客 436

Cadence 16.6与17.4双版本共存避坑指南:从安装顺序到环境变量配置

本文是一份详细的Cadence 16.6与17.4双版本共存实战指南。针对硬件工程师和PCB设计者同时处理新旧项目的需求,文章深入剖析了版本冲突根源,并提供了从安装顺序、环境隔离到故障排查的完整解决方案。核心在于通过环境变量精细化管理与脚本控制,实现两个版本的稳定共存与无缝切换,有效解决了文件关联混乱、交互布局失效等常见问题。

html8的博客 985

Commitizen + Husky 组合拳:三分钟搞定 Git 提交信息自动化校验

本文详细介绍了如何使用Commitizen和Husky工具组合实现Git提交信息的自动化校验,提升团队协作效率。通过配置交互式提交界面和Git钩子,确保每次提交都符合规范,便于生成变更日志和代码审查。文章包含完整配置步骤、高级定制技巧和实战案例,帮助开发者快速落地Git提交规范。

wdx01234567的博客 173

动态知识图谱构建:从本体论到工程实践

知识图谱作为语义网和人工智能领域的核心技术,旨在通过结构化的方式表示和组织知识。其核心原理在于将实体、概念及其关系建模为图结构,从而支持复杂的语义推理和关联查询。这一技术为机器理解数据间的深层联系提供了基础,在智能推荐、企业知识管理和学术研究等领域具有重要价值。通过结合自然语言处理(NLP)和图数据库技术,系统能够从非结构化数据中自动抽取知识,并构建动态演化的认知网络。本文以“本体论章鱼”项目为例,探讨了如何实现从静态本体到动态知识网络的范式转变,并详细解析了其分布式感知、适应性学习的架构设计,为构建灵活可

weixin_30731305的博客 663

从‘最速控制’到代码:深入拆解韩京清ADRC中TD跟踪器的fhan函数(含Matlab/Simulink实例)

本文深入解析韩京清ADRC中的fhan函数,从理论到代码实现,详细拆解其在Matlab/Simulink中的应用。通过分析最速控制问题和非线性TD的连续形式,揭示fhan函数在信号处理和噪声抑制中的独特优势,并提供工程实践中的参数整定和优化技巧。

weixin_42659194的博客 248

无锁队列的实现原理

队列在计算机中非常重要的一种数据结构,尤其在操作系统中。队列典型的特征是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信之间经常采用队列做缓存,缓解数据处理压力。结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现。根据操作队列的场景分为:单生产者——单消费者、多生产者——单消费者、单生产者——多消费者、多生产者——多消费者四大模型。其实后面三种的队列,可以归纳为一种多对...

鲜衣怒马楼兰月 6464

Allegro如何画Photoplot_Outline操作指导

在用Allegro进行PCB设计的时候,最后进行光绘输出前,Photoplot_Outline是必备一个图形,所有在Photoplot_Outline中的图形将被输出,Photoplot_Outline以外的图形都将不被输出。如何绘制Photoplot_Outline,具体操作如下。如何画Photoplot_Outline操作指导。

weixin_54787054的博客 2641

数据结构篇——优先队列(堆)

目录 优先队列 二叉堆 堆定义: 堆操作 插入 删除(最小元) 降低值 增加值 删除 构建堆(将一个无序的二叉树变为堆) 标准模板库的priority_queue 优先队列的构造 成员函数 用到优先队列的例题 UVA 11997 优先队列 优先队列也是一种队列,具有高级别元素先出队的特征。优先队列的工作是找出、返回、删除最高级别元素。优先队列的实现普遍用二叉堆 二叉堆 二叉堆是一棵完全二叉树,每个节点必须小于等于它的孩子节点,二叉堆可以用一个一维数组表示,如下,左儿子的

SYLTXDY的博客 511

yolov11添加P2小目标检测头与添加P6超大目标检测头

本文介绍了YOLO目标检测模型中上下采样的原理及应用。上采样通过插值算法放大特征图,YOLO通常采用最近邻插值;下采样则通过带步长的卷积缩小特征图提取高层语义特征。文章详细阐述了这两种操作在YOLO中的实现方式、结构特点及对称性问题,指出下采样后会使用C3模块进行特征整合,上采样后通过concat抑制分割感。此外,还分析了不同分辨率特征图适合检测不同尺寸目标的原因,并提出添加4倍小目标检测头的方法,即对上采样后的特征进行concat和C3模块处理。最后给出了YOLOv5原模型结构和添加4倍检测头后的结构对比

m0_64661770的博客 822

YOLOv11改进 - C3k2融合 | C3k2融合细节增强卷积DEConv(Detail-Enhanced Convolution)提升细微特征提取能力

本文介绍了细节增强卷积(DEConv)技术在YOLOv11中的结合应用。DEConv由标准卷积层和多种差异卷积层并行组成,通过计算像素差异和卷积操作增强特征提取能力,还采用重参数化技术简化模型结构。其优势在于能更好捕捉高频信息、保持参数数量不变且降低推理计算成本。我们将DEConv集成进YOLOv11,替换部分模块。

魔改工程师的博客 864

【数据结构】堆和堆的应用之优先级队列【详解篇6】

文章目录队列的几种变化二叉树的顺序存储存储方式下标关系堆(heap)堆的核心操作向下调整向上调整堆的应用堆(优先队列)的基本操作内部原理java中的优先级队列堆的其他应用-TopK 问题如:给定100亿个数字,找出其中前1000大的数字一个典型的TopK问题 队列的几种变化 普通的队列:先进先出 带优先级的队列(名字叫队列,本质上是一个特殊二叉树–>堆):按照顺序进,出队列的时候出优先级最高的元素,如果优先级相同,再按照先进先出的方式。 带类型的队列(消息队列):这里的类型指的不是int,Stri

m0_59157222的博客 441

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 382

STL之priority_queue优先队列

优先队列和其优先级详细介绍

行码棋 3万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

STL 之 优先队列(priority_queue)

1、什么是优先队列        能够完成下列两种操作的数据结构,我们便称之为优先队列。        ①插入一个数值    ②取出最大(或者最小)的数值(获取数值,并且删除)。        从严格意义上来说优先队列,并不是队列,因为它并不遵循队列的FIFO(先进先出的原则)。 2、实现优先队列       我们可以使用一种叫做“堆(heap)”的数据结构来实现优先队列。堆有一个重要的

Enstein_Jun 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

探索实现C++ STL容器适配器:优先队列priority_queue

 在算法竞赛中,选手们常常能在0.01秒内分出胜负;在实时交易系统中,毫秒级的延迟可能意味着数百万的盈亏;在高并发服务器中,每秒需要处理数万条不同优先级的请求——这些系统背后,都隐藏着同一种强大的数据结构:​优先队列(priority_queue)​作为C++标准库中最优雅的数据结构适配器,priority_queue完美封装了堆算法的高效性,却只需几行代码即可实现复杂优先级管理。本文将深入剖析

月亮永悬不落,剑指巅峰 2887

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【C++】STL中priority_queue(优先队列)

1.头文件 #include<queue> 2.定义 1.priority_queue<Type, Container, Functional> Type是数据类型,Container是容器类型(此容器必须是数组实现的容器,比如vector,deque,但不能是list。STL中默认为vector)Functional是比较方式,当使用自定义比较方式时需要传入这三个参数...

qq_43730185的博客 1013

STL源码剖析 | priority_queue优先队列底层模拟实现

【STL源码剖析】 priority_queue优先队列底层模拟实现

系统编程、网络编程 871

【STL】C++ 优先队列 priority_queue

priority_queue C++重载符号 operator

烦成航的博客 347

c++STL-优先队列priority_queue和仿函数

优先队列priority_queue及其模拟实现,仿函数的概念,和优先队列可能有关的OJ

m0_73693552的博客 861

STL优先队列(priority_queue) 与红黑树 性能

一、STL队列、优先队列(priority_queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。 在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。 首先要包含头文件#include<queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队。 优先队列具有队列的所有特性,包括队列的基本操作,只是在

Bruce的博客 2644

【STL】优先队列(priority_queue)

优先队列 一、定义: 普通的队列是一种先进先出的数据结构,元素在队列尾追加,从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出的特征。 二、priority_queue 1.头文件: #include <queue> 2.基本操作: empty()    //如果队列为空,则返回真 pop()    //删除对顶元素...

qq_43657344的博客 486

C++ STL (5) queue队列和priority_queue优先队列的简单用法

C++ STL (5) queue队列和priority_queue优先队列的简单用法 队列的简单介绍 queue队列的简单介绍 队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表(先进先出)。允许插入的端是队尾,允许删除的端是队头。 queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。 队列的...

瞎扯淡小基地 445

c++ STL: priority_queue优先队列

1. 概述 普通队列queue是一种先进先出的数据结构, priority_queue和queue的区别就在于,在优先队列priority_queue中,元素都被赋予优先级,出队是根据优先级出队,优先级高的先出队。 2. 原型说明 priority_queue优先队列在模板申明带3个参数: priority_queue<Type, Container, Functional>...

qq_42714490的博客 496

C++中STL容器之优先队列(堆排序)——priority_queue

1.优先队列的介绍 priority_queue 是“优先队列”。它和普通队列的区别在于,优先队列的队头元素总是最大的 ——即执行 pop 操作时,删除的总是最大的元素;执行 top 操作时,返回的是最大元素的引用。即默认队列头部的元素优先级最高,所以只能访问第一个元素。 一般的优先队列结构如下图: 值得注意的是: 上图中显示元素的方式反映了它们被检索的顺序。在 容器vector 中它们也可以...

75 69 69 80 32 67 79 68 73 78 71 33 1722

【C++/STL】6. priority_queue优先队列

优先队列底层是靠堆实现的,是一种特殊的队列。 优先队列的队首元素一定是当前队列中优先级最高的那个,也就是说,如果把优先队列中元素依次出队,会得到按优先级从大到小排列的一组元素 向优先队列中插入元素时,优先队列内部的堆结构会自动调整,保证队首元素永远是优先级最高的。 priority_queue定义于queue.h,命名空间std 一、构造函数 作用 代码 说明 定义一个pri...

佚失的诗篇 267
上一篇: POJ 3067 Japan 【树状数组经典】
下一篇: POJ 2365【YY水题】
莜莫oO
博客等级 码龄9年 7粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值