优先队列:priority_queue

来源:互联网 发布:java 线程间通信 编辑:程序博客网 时间:2024/06/06 13:09

优先队列是一种抽象数据类型,行为有些像队列,但是他不是先进先出型队列;


先出优先队列的元素是队列中优先级最高的元素。就像“急诊病人插队”;


优先队列头文件也是<queue>


④用“priority_queue<int>   pq来声明。这个pq是一个越小的整数优先级越低的优先队列。


出队元素不是先进队的元素,出队的方法由queue的front()变为了top(),而不再是front();


自定义类型也可以组成优先队列,但必须为每个元素定义一个优先级。这个优先级并不需要一个确定的数字,只需要能比较大小即可。看到这里,是不是想起了sort?没错,只要元素定义了“小于”运算符,就可以使用优先队列


在一些特殊情况,需要使用自定义方式比较优先级 


例如:要实现一个“个位数大的整数优先级反而小”的优先队列,可以定义一个结构体cmp,在cmp中重载“()”运算符,使cmp“看上去”像一个函数 ,

然后用“priority_queue<int,vector<int>,cmp>  pq”的方式定义。

下面是这个cmp的定义:
struct cmp {
          bool operator() (const int a, const int b) const {        //a 的优先级比b小时返回true
                    return a % 10 < b % 10;
          }
};
对于一些常见的优先队列,STL提供了更为简单的定义方法,

例如,“越小的整数优先级越大的优先队列”

可以写成“priority_queue<int,vector<int>,greater<int>   >pq”。

注意,最后两个“>”符号不要写在一起,

否则会被很多(但不是所有)编译器误认为是“>>”运算符。


参考地址:http://blog.csdn.net/crayondeng/article/details/16332169

0 0
原创粉丝点击