优先队列

引言:

c++因为有了STL库所以变得比c语言简单了许多,许多容器不需要自己实现,但是自己必须要熟悉掌握。在STL中有各种你想要的容器及函数,在解决问题中用恰当的容器和函数会有事半功倍的效果。今天就要介绍一下c++最常用的容器之一priority_queue的相关操作。

什么是优先队列?

优先级队列是一个容器适配器,它提供对最大(默认)元素的恒定时间查找。它提供了快速查找的功能,但是牺牲了插入和删除的时间。
可以提供用户提供的比较以更改顺序,例如 使用std :: greater 会使最小的元素显示为top()。
使用priority_queue类似于在某些随机访问容器中管理堆,其好处是不会意外使堆无效。

时间复杂度队列优先队列
插入O(1)O(log n)
删除O(1)O(log n)
查询O(n)O(log n)

如何使用

#include<queue>
using namespace std;

优先队列的创建:

priority_queue<int> q;
priority_queue<pair<int,int>> q;
priority_queue<int, vector<int>, greater<int> > q;//小顶堆,优先输出小数据
priority_queue<int, vector<int>, less<int> > q;//大顶堆,优先输出大数据
priority_queue<Type, Container, Functional>/*Type为数据类型, Container为保存数据的容器,
Functional为元素比较方式。如果不写后两个参数,那么容器默认用的是vector,比较方式默认用
operator<,也就是优先队列是大顶堆,队头元素最大。*/

相关函数:

q.empty();//是否为空
q.size(); //获取当前的大小
q.top(); //获取堆顶的元素
q.pop();//删除堆顶元素
q.push(int a);//插入元素并排序
q.emplace(int a,int b); //就地构造元素并排序

例子:

#include<iostream>
#include<queue>
using namespace std;
struct cmp{ //优先输出较小数
	bool operator()(int a, int b){
		return a>b;
	}
};
int main(){
    priority_queue<int,vector<int>,cmp> q;
    priority_queue<pair<int,int> > p;
    q.push(1);
    q.push(5);
    q.push(10);
    q.push(6);
    while(!q.empty()){
        cout<<q.top()<<endl; //输出为1 5 6 10
        q.pop();
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值