• 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;
    }
  • 相关阅读:
    利用scanf函数修改内存中任意位置内容
    TSql
    完整性约束及其违约处理
    实现关机、重启、注销
    建立索引的原则
    我只想安静的大便
    格式化GridView特定的值
    SELECT语句执行顺序解析
    CPU对存储器的读写
    Linux常用97条命令
  • 原文地址:https://www.cnblogs.com/iamswf/p/4466012.html
Copyright © 2020-2023  润新知