stl中优先级队列priority_queue的使用

1. 优先级队列

优先队列是一种容器适配器。
在这里插入图片描述

  • 默认使用vector作为其底层存储数据的容器;
  • 在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。
  • 注意:默认情况下priority_queue是大堆

2. 所在头文件

#include<queue>

3. 常用接口

priority_queue()/priority_queue(first,last) //构造一个空的优先级队列
empty( )                                    //检测优先级队列是否为空,是返回true,否则,false
top( )                                      //返回优先级队列中最大(最小元素),即堆顶元素
push(x)                                     //在优先级队列中插入元素x
pop()                                       //删除优先级队列中最大(最小)元素,即堆顶元素

4. 使用示例

  1. 定义大根堆
#include<iostream>
#include<queue>
using namespace std;

int main(){
	priority_queue<int> p;
	p.push(1);
	p.push(2);
	p.push(8);
	p.push(5);
	p.push(43);
     for(int i=0;i<5;i++){
            cout<<p.top()<<endl;
            p.pop();
        }
     return 0;

}
  1. 定义小根堆:priority_queue<int,vector,greater > p
#include<iostream>
#include<queue>
using namespace std;

int main(){
	priority_queue<int,vector<int>,greater<int> > p;
	p.push(1);
	p.push(2);
	p.push(8);
	p.push(5);
	p.push(43);
     for(int i=0;i<5;i++){
            cout<<p.top()<<endl;
            p.pop();
        }
     return 0;

}
  1. 自定义优先级,重载默认的 < 符号
#include<iostream>
#include<queue>
#include<cstdlib>
using namespace std;

struct Node{
    int x,y;
	Node(int a=0, int b=0):
		x(a), y(b) {}
};

struct cmp{
     bool operator()(Node a, Node b){
        if(a.x == b.x)	return a.y>b.y;
        return a.x>b.x;
        }
};
int main(){
	priority_queue<Node, vector<Node>, cmp>p;
    for(int i=0; i<10; ++i)
		p.push(Node(rand(), rand()));
     while(!p.empty()){
            cout<<p.top().x<<' '<<p.top().y<<endl;
            p.pop();
        }
     return 0;
}

参考链接:priority_queue

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值