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函数。

你可能感兴趣的:(队列)