Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >优先队列的优先级_kafka优先级队列

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

作者头像
全栈程序员站长
发布于 2022-10-05 04:09:29
发布于 2022-10-05 04:09:29
1.4K00
代码可运行
举报
运行总次数: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++STL模板库适配器之优先级队列
优先级队列.不采用严格的先进先出的顺序.而是按照优先级. 给定某一时刻位于队列头的元素. 如果两个元素有相同的优先级.他们他们在队列中的顺序就是先进先出.底层是vector容器支持.可以使用deque,不能使用list.因为优先级队列要支持对元素的随机访问.便于排序.
IBinary
2019/05/25
4540
stack和queue及优先级队列和适配器(包括deque)的介绍
其实在数据结构中我们学习了栈和队列后我们在C++部分中学习起来stack和queue就很容易上手了!
ahao
2024/03/19
1690
stack和queue及优先级队列和适配器(包括deque)的介绍
优先级队列
优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆
南桥
2024/07/26
740
优先级队列
算法与数据结构之优先级队列
复习一下:前面讲的最大最小堆的生成,是把一个数组转换成完全二叉树之后,才转换成最大最小堆的。然后生成的时候先从最下方的叶结点开始生成最大/最小堆。
灯珑LoGin
2022/10/31
2440
算法与数据结构之优先级队列
暑假(补)-6
优先队列是什么呢?优先队列其实是一种特殊的队列,对队列的元素按照一定的先后顺序,队列自动排序,这就是优先队列。
AngelNH
2020/04/16
2990
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque。
秦jh
2024/06/12
2180
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
【C++】优先级队列介绍与模拟实现
优先级队列是一种特殊的队列,其中的元素都被赋予了优先级。元素的优先级决定了它们在队列中的顺序。在优先级队列中,元素按照优先级从高到低的顺序出队列。
大耳朵土土垚
2024/06/06
1380
【C++】优先级队列介绍与模拟实现
UESTC 1599 wtmsb【优先队列+排序】
题目链接:UESTC 1599 wtmsb 题意:给你一组数,每一次取出两个最小的数,将这两个数的和放入这组数中,直到这组数只剩下一个,求最后剩下那个数的大小! 分析:比赛的时候首先我就看到这道题数据是200000,跑时100ms,我把思路捋了一遍,然后讲给旁边人听,一眼看过去,lfh说用哈夫曼树吧,然后找了个板子直接扔上去了, 结果显示出这样的操作:Restricted Function on test 1,从来没见过这个错误啊,百度找了一下,发现这个错误是它oj本身不支持某些函数,比如qsort这种排序
Angel_Kitty
2018/04/09
5270
【UESTC 482】Charitable Exchange(优先队列+bfs)
给你n个物品交换,每个交换用r,v,t描述,代表需要用r元的东西花费t时间交换得v元的东西。一开始只有1元的东西,让你求出交换到价值至少为m的最少时间代价。 相当于每个交换是一条边,时间为边权,求走到价值大于等于m的点的最短路径。 bfs的时候,用优先队列来储存状态,每次取出花费总时间最小的状态。
饶文津
2020/06/02
2220
HDU 1896 优先队列用法
题意:就是一条直线上面有很多石头。石头有初始位置跟能扔的距离,如果是奇数石头,那么就扔,否则,就在原位置不管。问最远石头距离起点的位置是多少。
杨鹏伟
2020/09/11
3300
ZOJ 2724 Windows Message Queue(优先队列)
优先队列的概念及使用方法 题意:输入GET,队列为空则输出空,否则输出最优先的数据(所谓最优先,就是优先值最小的一个),若输入PUT,输入三个数据,分别是名字,参数,和优先值。 #include<stdio.h> #include<string.h> #include<algorithm> #include<queue> using namespace std; struct Node { char name[100]; int parameter,priority; }node; bo
用户1624346
2018/04/11
7130
Codeforces Round #437 E. Buy Low Sell High(贪心+优先队列)
题目链接:http://codeforces.com/contest/867/problem/E
Ch_Zaqdt
2019/01/11
4040
LeetCode 1354. 多次求和构造目标数组(优先队列+逆向思考)
给你一个整数数组 target 。一开始,你有一个数组 A ,它的所有元素均为 1 ,你可以执行以下操作:
Michael阿明
2020/07/13
7442
LeetCode 1354. 多次求和构造目标数组(优先队列+逆向思考)
【C++/STL】优先级队列的介绍与模拟实现&&仿函数
点击跳转到文章【C++/STL】stack/queue的使用及底层剖析&&双端队列&&容器适配器
IsLand1314
2024/10/15
970
【C++/STL】优先级队列的介绍与模拟实现&&仿函数
【C++】STL容器适配器——priority_quene(堆/优先级队列)类的使用指南(含代码使用)(19)
YY的秘密代码小屋
2024/01/22
1800
【C++】STL容器适配器——priority_quene(堆/优先级队列)类的使用指南(含代码使用)(19)
priority_queue的用法「建议收藏」
  模板申明带3个参数:priority_queue<Type, Container, Functional>,其中Type 为数据类型,Container为保存数据的容器,Functional 为元素比较方式。
全栈程序员站长
2022/09/06
4180
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
5580
C++queue容器学习(详解)
STL 之 priority_queue 优先级队列
priority_queue 优先级队列,鄙人以为这是一种很重要的迭代器,重要到是图论位必备技能。
ACM算法日常
2019/03/18
1.2K0
STL之priority_queue篇——深入剖析C++中优先队列的实现原理、核心特性及其底层机制
本文旨在深入剖析C++中优先队列的实现原理、核心特性及其底层机制,同时结合丰富的实战案例,帮助读者全面掌握优先队列的使用方法,并能够灵活应用于各种复杂问题的解决中。我们将从优先队列的基本概念出发,逐步深入到其内部实现细节,包括堆(Heap)结构的应用、比较函数的自定义等关键知识点。此外,本文还将探讨优先队列在解决经典算法问题中的实际应用,通过具体代码示例,展示如何在不同场景下发挥优先队列的最大效用
suye
2024/10/16
5800
STL之priority_queue篇——深入剖析C++中优先队列的实现原理、核心特性及其底层机制
C++ STL容器之priority_queue(优先队列)快速入门
而且可以在任何时候往优先队列里面加入(push)元素,接着优先队列底层的数据结构堆会随时调整结构,使得每次的队首元素都是优先级最大的。(这里的优先级是可以规定出来的,默认是数字越大优先级越大)
可定
2020/04/20
2.5K0
推荐阅读
相关推荐
C++STL模板库适配器之优先级队列
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文