初识优先队列——priority_queue

  这个是STL中的特殊容器,和学习其他容器vector,queue,stack一样,我们用类比的方式来学习它。

首先,当然是怎么定义了。。priority_queue<Type, Container, Functional>

既然是优先队列,总该有个优先的原则吧,怎么去优先呢?显然你要给个标准它。这里我们就需要提供一个比较函数,记住STL中是使用"<"来进行优先级比较的。首先我们利用默认的比较函数来定义队列:

priority_queue<int> q;

这样我们声明的a是用基本容器vector装的int型数据,队列头是数值大的元素。要是我们想构造一个小元素在前的队列怎么弄呢?

我们需要重载小于比较符。

struct cmp

{

  bool operator()(int a,int b)

  {  return a>b; }

}

priority_queue<int,vector<int>,cmp> q;

这样就做成了一个从小到大的队列。

接着,要是想构造结构体优先队列怎么办呢?嘿嘿,除了类似上面的方式,还有如下方式可以解决:

struct node

{

  int x,y;

  friend bool operator<(node a,node b)

  {  return a.y>b.y;  }

};

priority_queue<node> q;

 事实上第一个方法比上面的这个要通用写。因为当要改变基本数据类型(比如int)的比较规则的时候,只能用第一个方法!

 

posted @ 2013-05-12 22:58  Amazing_Y  阅读(215)  评论(0编辑  收藏  举报