为了加深下印象,想一遍,方便下次查。
优先队列是一种抽象数据类型,先出队的不同于显出队列,而是队列中优先级最高的元素现出。(类似于“急诊病人插队”)
STL的优先队列在<queue>头文件中,用“priority_queue<int > pq”来声明,这个pq是一个“越小的整数优先级越低的优先队列”。
注意:由于出队的元素并不是最先进队的元素,出队的方式由queue的front()改为了top() 即优先级最高的先走
自定义类型也可以组成优先队列,必须给每个元素定义一个优先级,这个优先级并不一定是个数字,能比较大小即可。类似于SORT只要元素定义了“小于”运算符,就可以使用优先队列。
也可以按照需求自定义比较优先级,比如: 整数也越大优先级越小“
定义一个结构体cmp,重载”*()“运算符,使其”看上去像个函数“,然后用priority_queue<int ,vector<int >, cmp >pq的方式定义。
struct cmp
{
bool operator() (const int a,const int b) const
{
return a>b;
}
};
下面为越小的整数优先级越大的优先队列
priority_queue <int ,vector<int > ,greater <int > >pq
最后两个>不要写在一起
例题:
UVA 136 Ugly Number