前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >优先队列的优先级_kafka优先级队列

优先队列的优先级_kafka优先级队列

作者头像
全栈程序员站长
发布于 2022-10-05 04:09:29
发布于 2022-10-05 04:09:29
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

概念

☺优先队列是一种用来维护一组元素构成的结合S的数据结构,其中每个元素都有一个关键字key,元素之间的比较都是通过key来比较的。优先队列包括最大优先队列和最小优先队列,优先队列的应用比较广泛,比如作业系统中的调度程序,当一个作业完成后,需要在所有等待调度的作业中选择一个优先级最高的作业来执行,并且也可以添加一个新的作业到作业的优先队列中。

  • 优先队列的实现中,我们可以选择堆数据结构,最大优先队列可以选用大堆,最小优先队列可以选用小堆来实现。
特点

☺ 优先级队列是0个或多个元素的集合,每个元素都有一个优先权或值。

☺当给每个元素分配一个数字来标记其优先级时,可设较小的数字具有较高的优先级,这样更方便地在一个集合中访问优先级最高的元素,并对其进行查找和删除操作。

☺对优先级队列,执行的操作主要有:(1)查找,(2)插入,(3)删除。

☺ 在最小优先级队列(min Priority Queue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素。

☺在最大优先级队列(max Priority Queue)中,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素。

☺ 插入操作均只是简单地把一个新的元素加入到队列中。

优先级队列好处
  • 自动排序
优先队列的基本操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素
q.back();//返回q的末尾元素
简单使用
默认的优先队列(非结构体结构)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<cstdio>
#include<queue>
using namespace std;
priority_queue <int> 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();
}
  • 输出: 14 12 10 8 6
默认的优先队列(结构体,重载小于)

结构体:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct node
{
    int x,y;
    bool operator < (const node & a) const
    {
        return x<a.x;
    }
};

实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<cstdio>
#include<queue>
using namespace std;
struct node
{
    int x,y;
    bool operator < (const node & a) const
    {
        return x<a.x;
    }
}k;
priority_queue <node> q;
int main()
{
    k.x=10,k.y=100; q.push(k);
    k.x=12,k.y=60; q.push(k);
    k.x=14,k.y=40; q.push(k);
    k.x=6,k.y=80; q.push(k);
    k.x=8,k.y=20; q.push(k);
    while(!q.empty())
    {
        node m=q.top(); q.pop();
        printf("(%d,%d) ",m.x,m.y);
    }
}
  • 输出: (14,40) (12,60) (10,100) (8,20) (6,80)
less和greater优先队列
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
priority_queue<int,vector<int>,less<int> >q;
priority_queue<int,vector<int>,greater<int> >q;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<cstdio>
#include<queue>
using namespace std;
priority_queue <int,vector<int>,less<int> > p;
priority_queue <int,vector<int>,greater<int> > q;
int a[5]={
  
  10,12,14,6,8};
int main()
{
    for(int i=0;i<5;i++)
        p.push(a[i]),q.push(a[i]);

    printf("less<int>:")
    while(!p.empty())
        printf("%d ",p.top()),p.pop();  

    pritntf("\ngreater<int>:")
    while(!q.empty())
        printf("%d ",q.top()),q.pop();
}
  • 输出: less:14 12 10 8 6 greater:6 8 10 12 14

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月14日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
STL 之 priority_queue 优先级队列
priority_queue 优先级队列,鄙人以为这是一种很重要的迭代器,重要到是图论位必备技能。
ACM算法日常
2019/03/18
1.3K0
【C++】STL——容器适配器priority_queue(优先级队列)详解 及 仿函数的介绍和使用
我们上一篇文章学了queue(队列),那优先级队列也是在<queue>里面的:
YIN_尹
2024/01/23
14.5K0
【C++】STL——容器适配器priority_queue(优先级队列)详解 及 仿函数的介绍和使用
C++STL模板库适配器之优先级队列
优先级队列.不采用严格的先进先出的顺序.而是按照优先级. 给定某一时刻位于队列头的元素. 如果两个元素有相同的优先级.他们他们在队列中的顺序就是先进先出.底层是vector容器支持.可以使用deque,不能使用list.因为优先级队列要支持对元素的随机访问.便于排序.
IBinary
2019/05/25
4590
C++ STL容器之priority_queue(优先队列)快速入门
而且可以在任何时候往优先队列里面加入(push)元素,接着优先队列底层的数据结构堆会随时调整结构,使得每次的队首元素都是优先级最大的。(这里的优先级是可以规定出来的,默认是数字越大优先级越大)
可定
2020/04/20
2.5K0
priority_queue的用法「建议收藏」
  模板申明带3个参数:priority_queue<Type, Container, Functional>,其中Type 为数据类型,Container为保存数据的容器,Functional 为元素比较方式。
全栈程序员站长
2022/09/06
4460
stack和queue及优先级队列和适配器(包括deque)的介绍
其实在数据结构中我们学习了栈和队列后我们在C++部分中学习起来stack和queue就很容易上手了!
ahao
2024/03/19
1960
stack和queue及优先级队列和适配器(包括deque)的介绍
c++ stl 优先队列_低优先级队列要等几局
我们传三个参数进去,可以看到优先级队列模板有三个参数,一个是数据类型,一个是被适配的容器,一个是仿函数,仿函数在下面我们 会讲解,一般第二个参数传入的容器需要满足可以随机访问,例如vector和deque。
全栈程序员站长
2022/11/09
6390
c++ stl 优先队列_低优先级队列要等几局
优先级队列
优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆
南桥
2024/07/26
1310
优先级队列
priority_queue 的使用
priority_queue 优先队列,其底层是用堆来实现的。在优先队列中,队首元素一定是当前队列中优先级最高的那一个。 在优先队列中,没有 front() 函数与 back() 函数,而只能通过 top() 函数来访问队首元素(也可称为堆顶元素),也就是优先级最高的元素。
剑影啸清寒
2019/05/26
6570
算法与数据结构之优先级队列
复习一下:前面讲的最大最小堆的生成,是把一个数组转换成完全二叉树之后,才转换成最大最小堆的。然后生成的时候先从最下方的叶结点开始生成最大/最小堆。
灯珑LoGin
2022/10/31
2580
算法与数据结构之优先级队列
【C++进阶】深入STL之 栈与队列:数据结构探索之旅
前言: 在编程的世界里,数据结构是构建高效、可靠程序的基础。它们就像是我们编程工具箱中的精密工具,帮助我们解决各种复杂的问题。而在C++的STL中,栈(Stack)和队列(Queue)是两种非常重要的数据结构,它们以不同的方式管理和操作数据,为我们的程序提供了极大的灵活性
Eternity._
2024/06/14
4560
【C++进阶】深入STL之 栈与队列:数据结构探索之旅
暑假(补)-6
优先队列是什么呢?优先队列其实是一种特殊的队列,对队列的元素按照一定的先后顺序,队列自动排序,这就是优先队列。
AngelNH
2020/04/16
3120
一文带你掌握 优先级队列
本文通过底层实现优先级队列的部分接口,构建优先级队列的步骤图等详细讲解的方式,使读者对优先级队列有深刻的理解. 建议先学习数据结构中有关 "堆"的知识,否则理解起来是有些难度的.
初阶牛
2023/10/14
3100
一文带你掌握 优先级队列
STL之priority_queue篇——深入剖析C++中优先队列的实现原理、核心特性及其底层机制
本文旨在深入剖析C++中优先队列的实现原理、核心特性及其底层机制,同时结合丰富的实战案例,帮助读者全面掌握优先队列的使用方法,并能够灵活应用于各种复杂问题的解决中。我们将从优先队列的基本概念出发,逐步深入到其内部实现细节,包括堆(Heap)结构的应用、比较函数的自定义等关键知识点。此外,本文还将探讨优先队列在解决经典算法问题中的实际应用,通过具体代码示例,展示如何在不同场景下发挥优先队列的最大效用
suye
2024/10/16
9020
STL之priority_queue篇——深入剖析C++中优先队列的实现原理、核心特性及其底层机制
C++queue容器学习(详解)
一.queue模版类的定义在<queue>头文件中。 queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是可选的,默认为dqueue类型。 定义queue对象的示例代码如下: queue<int>q1; queue<double>q2; queue的基本操作有: 1.入队:如q.push(x):将x元素接到队列的末端; 2.出队:如q.pop() 弹出队列的第一个元素,并不会返回元素的值; 3,访问队首元素:如q.front(
Angel_Kitty
2018/04/08
5830
C++queue容器学习(详解)
【C++】优先级队列priority_queue&&仿函数
这里先简单介绍一下优先级队列priority_queue:优先队列是一种容器适配器,默认的情况下,如果没有为特定的priority_queue类实例化指容器类,则使用vector (deque 也是可以的),需要支持随机访问迭代器,以便始终在内部保持堆结构
平凡的人1
2023/10/15
2430
【C++】优先级队列priority_queue&&仿函数
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque。
秦jh
2024/06/12
2530
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
C++ STL学习之【优先级队列】
优先级队列 priority_queue 是容器适配器中的一种,常用来进行对数据进行优先级处理,比如优先级高的值在前面,这其实就是初阶数据结构中的 堆,它俩本质上是一样东西,底层都是以数组存储的完全二叉树,不过优先级队列 priority_queue 中加入了 泛型编程 的思想,并且属于 STL 中的一部分
北 海
2023/07/01
2930
C++ STL学习之【优先级队列】
c++优先级队列priority_queue使用lambda表达式出错问题
优先级队列priority_queue,可以在队列中自定义数据的优先级, 让优先级高的排在队列前面优先出队。它具有队列的所有特性,包括队列的基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。
杨永贞
2022/05/25
7960
c++优先级队列priority_queue使用lambda表达式出错问题
【C++】优先级队列介绍与模拟实现
优先级队列是一种特殊的队列,其中的元素都被赋予了优先级。元素的优先级决定了它们在队列中的顺序。在优先级队列中,元素按照优先级从高到低的顺序出队列。
大耳朵土土垚
2024/06/06
1720
【C++】优先级队列介绍与模拟实现
推荐阅读
相关推荐
STL 之 priority_queue 优先级队列
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验