Syins的优先队列理解

何为优先队列?

在回答这个问题之前,先想一想只是简单的队列是不是用处好像不大,或者说并不是非常方便,所以能不能有一种方式,让元素进入队列的时候就有序了呢。
这个问题当然被很多先驱考虑过,这也就出现了优先队列
这里介绍一些结构

1:默认结构

定义:

priority_queue<int>que;//que是优先队列的名称。

优先级:值越大,越优先。
队列结果:《头》》降序》《尾》

2:greater结构

定义:

priority_queue<int,vector<int>,greater<int> >que;//que是优先队列的名称。这里最后的>>要隔开,不然容易误判成io输入中的>>;

优先级:值越小,越优先。
队列结果:《头》》升序》《尾》

3:less结构

定义:

priority_queue<int,vector<int>,less<int> >que;//que是优先队列的名称。这里最后的>>要隔开,不然容易误判成io输入中的>>;

优先级:值越大,越优先。
队列结果:《头》》降序》《尾》

4:自定义结构——结构体1

定义:

struct cmp1{
    bool operator()(int &a,int &b){
        return a>b;//这里的意思是如果条件成立返回1,而1在优先队列里会使b的优先值大,否则a大,,最后表现为升序
    }
};//自定义最大的有点就是可以加入多个判断条件,这里当然只是列举了最简单的一种
int main()
{
	priority_queue<int,vector<int>,cmp1>que;//这里que是优先队列的名称
}
5:自定义结构——结构体2(同时定义数据类型)

定义:

struct cmp1{
    int n;//数据类型在结构体里直接定义
    bool operator < (const cmp1 &a) const {
        return n>a.n;//这里的意思是如果条件成立返回1,而1在优先队列里会使后者(这里的a是新读入的cmp1变量)的优先值大,否则前者大,,最后表现为升序
    }
};//这里同样可以加入多个判断条件,这里当然也只是列举了最简单的一种
int main()
{
	priority_queue<cmp1>que;//这里que是优先队列的名称
}

值得注意的是在这种模式下cout输出top是不稳定的(哪怕只有一个值),非常容易出错(反正我每次都报错),输出的话尽量先转化,如果只有一个值,也可用基本输入输出中的printf函数。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值