STL中的优先级队列priority_queue


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;
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM