priority_queue用法

size() empty()是所有容器都有
要求:push_back() pop_back() front()操作,还有随机访问的能力可以使用的顺序容器有:vector deque list 
底层实现是基于1.vector   2.堆  实现。
作用:允许为队列中的元素建立优先级,新加入的元素会排在所有优先级比它低的元素之前。
默认使用大顶堆:优先级最大的在堆顶!!!
可以放重复元素!!!
#include <iostream>
#include <queue>
using namespace std;
int main()
{	
	//队首元素是优先级最高的元素
	priority_queue<int> q;
	q.push(3); //O(logn),n为当前优先队列中元素的个数
	q.push(4);
	q.push(5);
	q.pop(); //O(logn),将堆顶元素出队,n为当前优先队列中元素的个数
	cout << q.top() << endl; //O(1),获得堆顶元素 
	if (q.empty()) cout << "empty" << endl; //O(1)
	cout << q.size() << endl; //O(1)
    return 0;
} 
//
4 
2

1.基本类型(int,double,char)优先级的设置。
默认是数字越大优先级越高

priority_queue<int> q; 
//等价于priority_queue<int, vector<int>, less<int>> q;
第二个参数是承载底层数据结构堆的数据结构。
第三个参数less<int>表示数字越大优先级越高,改成greater<int>表示数字越小优先级越高。

2.结构体优先级的设置。

struct fruit{
	string name;
	int price;
	//只能重载'<',因为'>' 和'=='都可以用 '<'来表示。
	friend bool operator< (fruit f1, fruit f2) { //加上friend!!!加上bool!!!
		return f1.price < f2.price; 
	}
}
priority_queue<fruit> q;  //price越大优先级高

3.基本数据类型是pair,优先级的设置

struct cmp {
	bool operator () (const pair<int, int>& p1, const pair<int, int>& p2) const{ 
		return p1.second < p2.second; 
	}
}
priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> q;

适用于:
1.取出前几个最大/最小的元素(Dijkstra算法的优化,哈夫曼树带权路径长度的求解)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值