首页 > 其他 > 详细

STL中的优先级队列priority_queue

时间:2015-04-29 16:39:31      阅读:155      评论:0      收藏:0      [点我收藏+]

priority_queue(queue类似)完全以底部容器为根据,再加上二叉堆(大根堆或者小根堆)的实现原理,所以其实现非常简单,缺省情况下priority_queue以vector作为底部容器。另外priority_queue缺省比较规则是less:

class Compare = less<typename Sequence::value_type>

less对应的是按照大根堆来实现优先级队列,当然也可以将比较规则设置为greater,这时候是按照小根堆来实现的优先级队列。

 

priority_queue(queue一样)以底部容器完成其所有工作,具有这种“修改某物接口,形成另一种风貌”性质者,称为适配器(adapter)。因此,priority_queue往往不被归类于容器(container),而是归类于容器适配器(container adapter)。priority_queue是一种顺序容器适配器,STL中顺序容器还包括queue,stack。这三种顺序容器适配器都使用底层的顺序容器完成自己应该完成的工作。

 

以上内容总结自《STL源码剖析》。

priority_queue示例:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int main()
{
    int ia[9] = {0,1,2,3,4,8,9,3,5};
    priority_queue< int, vector<int>, greater<int> > ipq(ia, ia + 9);//Compare为greater<int>说明实现原理是小根堆,可以改为less<int>观察输出
    cout << "size = " << ipq.size() << endl;

    for(int  i = 0; i < ipq.size(); ++i){
        cout << ipq.top() << " ";
    }
    cout << endl;

    while(!ipq.empty()){
        cout << ipq.top() << " ";
        ipq.pop();
    }
    cout << endl;

    return 0;
}

 

STL中的优先级队列priority_queue

原文:http://www.cnblogs.com/iamswf/p/4466012.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!