priority_queue优先队列的使用方法

说到优先队列,大家肯定想到了队列(这肯定是对于学过队列的同学来说,当然了,没学过也没事,对于本篇文章没什么问题滴),队列的特征是后进后出,按照排队先来后到的顺序的,本篇文章介绍的priority_queue优先队列是按照优先级的顺序来排队,优先级我们可以把它理解成是一种规则,不像队列那样抽象的说是按照时间的,优先队列的这种规则我们可以自己自定义,接下来我们来看看具体的讲解。

目录

一、关于priority_queue使用到的的函数

 二、priority_queue的定义

          三、具体举例

     (1)普通例子: 

     (2)pair类型  比较(先比较第一个,如果第一个想等的话再比较第二个)

     (3)自定义排序


一、关于priority_queue使用到的的函数

size()    优先队列中的元素个数
empty()   判断优先队列中的元素是否为空
top()     优先队列中的队首元素,也就是优先级最高的元素
push()    插入元素到队尾,并且按照优先级排好序
pop()     删除容器中的第一个元素

 二、priority_queue的定义

priority_queue

type就是类型,如int,double等等。

container容器类型的意思,必须是用数组实现的容器,比如说有vector,deque等,但不能用list链表,STL默认的是vector,如果没有理解的话,我们就把这段介绍简化为以后要用vector就行啦,基本上都是它。

functional就是比较的方式,也就是自定义的规则。

当我们想要自定义规则,才需要传入这三个参数,平时一般不需要的。

如priority_queue是从大到小排的,就是降序(大顶堆,有些资料又说是小顶堆,我都搞糊涂了,哈哈哈) 

三、具体举例

(1)普通例子: 

//priority_queue降序排列,从大到小
//priority_queue,less >降序排列
//priority_queue,greater >升序排列,从小到大

#include
using namespace std;
int n;
priority_queuea;//初始是从大到小排序
int main()
{
	cin>>n;
	int x;
	for(int i=0;i>x;
		a.push(x);
	}
	while(!a.empty()){
		cout<

 priority_queue优先队列的使用方法_第1张图片

(2)pair类型  比较(先比较第一个,如果第一个想等的话再比较第二个)

#include
using namespace std;
priority_queue >a;//从大到小,降序排列
int main()
{
	pairb(11,2);
	pairc(1,23);
	paird(234,3);
	paire(78,888);
	a.push(b);
	a.push(c);
	a.push(d);
	a.push(e);
	while(!a.empty()){
		cout<

priority_queue优先队列的使用方法_第2张图片

(3)自定义排序

struct rule{   
    bool operator()(node a,node b){
        return a.y     }
};

这个叫做运算符重载,顾名思义,就是自己修改规则,rule是自定义的规则名称,自己选择,其他的大家可以当成死记硬背的知识,return 后面的语句就是自己指定的规则,上面的规则是按照结构体中成员变量y从大到小来排序的

#include
using namespace std;
typedef struct{
	int x;
	int y;
}node;
struct rule{   //按照结构体中y从大到大
	bool operator()(node a,node b){
		return a.y>n;
	priority_queue,rule>a;
	for(int i=0;i>q.x>>q.y;
		a.push(q);
	}
	cout<<"优先级级:-----------"<

 priority_queue优先队列的使用方法_第3张图片

 好啦,本篇文章结束啦,想要学会priority_queue我还推荐大家去洛谷上面找相关题目去练习滴,加油哈!!!

你可能感兴趣的:(C++,c++,算法)