(priority_queque)优先队列容器适配器的使用

容器适配器就是在基础的顺序容器上定义的一个新的接口。

这里的顺序容器包括:vector,list,deque.

priority_queque是建立在vector或deque容器上的。

优先级队列和普通的队列操作一样。

包括:出队,入队,读取队首元素,判断队列是否空等。

只不过不同的是优先级队列并非先进先出,而是根据优先级出队,它会将队列中最大的元素出队。

好像是对普通队列进行了从大到小排序后,在进行出队操作。

队列中的元素比较规则默认是按元素的值由大到小排序。

当然,也可以自己定义比较规则。

如果优先队列的元素是类类型。可以重载"<"操作符,定义自己的比较规则。

如下:

#include <queue>

#include <iostream>

using namespace std;

struct data

{

       int id;

       bool operator<(const data& d) const

       {

              return d.id<id;

       }

};

int main()

{

       priority_queue<data> pd;

       data temp;

       temp.id = 2;

       pd.push(temp);

       temp.id = 3;

       pd.push(temp);

       while (!pd.empty())

       {

              cout<<pd.top().id<<endl;

              pd.pop();

       }

       return 0;

}

 

通过重新定义小于关系,改变队列出队顺序。

如果不是类类型。可以通过重载"()"操作符的方式定义优先级。

如下

#include <queue>

#include <iostream>

using namespace std;

struct mycmp{

       bool operator()(const int &a, const int &b)

       {

              return a>b;

       }

};

int main()

{

       priority_queue<int,vector<int>,mycmp> pq;

       pq.push(2);

       pq.push(3);

       while (!pq.empty())

       {

              cout<<pq.top()<<endl;

              pq.pop();

       }

       return 0;

}

 

优先级队列,我不常用,今天看到一个程序中使用,因此了解。

posted @ 2010-07-10 15:01  open source  阅读(367)  评论(0编辑  收藏  举报