zoukankan      html  css  js  c++  java
  • C++STL特殊容器priority_queue

    在了解priority_queue(优先队列)前,可以先去瞅瞅queue,下面是传送门啦>——<

    传送门

    priority_queue的基本性能

    class priority_queue<>实现出一个queue,只不过其中的元素依照优先级被读取。priority_queue的接口与queue非常相近,只不过在插入元素后priority_queue会自动为元素排序,默认排序是operator <形成降序排列,也就是说,队首的元素默认是最大的元素,我们在弹出元素时,就会弹出最大的那个元素。值得注意的是,如果同时存在若干个数值最大的元素,我们无法确知究竟哪一个会入选。

    priority_queue使用须知

    1.包含头文件

    #include<queue>

    2.在头文件<queue>中,class priority_queue 定义如下

    namespace std
    {
        template <typename T,
                  typename Container = vector<T>
                  typename Compare = less<typename Container::value_type>>
                 class priority_queue;
    }

    第一个template参数是元素类型,带有默认值的第二个template参数定义了priority_queue内部用来存放元素的容器,默认容器为vector,带有默认值的第三个template参数定义出“用以查找下一个最高优先级元素”的排序准则,默认以operator<作为比较标准。

    但实际上,你可以用任何sequence容器支持priority_queue,只要他们支持random-access iterator和front()、push_back()、pop_back()等操作就行。由于priority_queue用到了STL heap算法,所以容器必须支持random-access。

    priority_queue核心操作

    1.核心接口成员函数

    push() //将一个元素放入priority_queue中
    top()   //返回priority_queue的一个队首元素,但是不删除它
    pop()  //删除priority_queue的一个队首元素,但是不返回它

    2.建立一个升序排序准则的priority_queue

    priority_queue<int,vector<int>,greater<int> >  pq;  //建立一个容器为vector名为 pq 的 priority_queue

    3.priority_queue的具体操作

    #include<iostream>
    #include<queue>     //必不可少的头文件们
    using namespace std;
    int main()
    {
        //创建一个容器为string的优先队列
        priority_queue<string>  pq1;
        //插入三个字符串
        pq1.push("AWSL");
        pq1.push("WSND");
        pq1.push("NMSL");
        //打印优先队列
        cout << "priority_queue pq1:" << endl;
        cout << "now pq1.size is: ";
        cout << pq1.size() << endl;
        cout << "从队首开始弹出pq1的元素" << endl;
        cout << pq1.top() << endl;
        pq1.pop();
        cout << pq1.top() << endl;
        pq1.pop();
        cout << pq1.top() << endl;
        pq1.pop();
        cout << "now pq1.size is: ";
        cout << pq1.size() << endl;
        cout << endl;
        //-----------------------------------
        //创建一个容器默认但是排序准则为升序的优先队列
        priority_queue<int, vector<int>, greater<int> >  pq2;
        //插入三个数字
        pq2.push(4396);
        pq2.push(777);
        pq2.push(250);
        //打印优先队列
        cout << "priority_queue pq2:" << endl;
        cout << "now pq2.size is: ";
        cout << pq2.size() << endl;
        cout << "从队首开始弹出pq2的元素" << endl;
        cout << pq2.top() << endl;
        pq2.pop();
        cout << pq2.top() << endl;
        pq2.pop();
        cout << pq2.top() << endl;
        pq2.pop();
        cout << "now pq2.size is: ";
        cout << pq2.size() << endl;
    }

    本文留下了一个小bug,等待初学者自己去发现哟,嘻嘻嘻/*-*

     

  • 相关阅读:
    HTML5课程
    css3兼容代码
    动画
    css3学习笔记(一)
    3d旋转
    Windows安装IIS后,启动网站报错:不能在此路径中使用此配置节……
    AngularJs1.X学习--路由
    Angular学习笔记 ——input 标签上的【name属性】和【ngModelOptions属性】
    Angular学习笔记【ngx-bootstrap】中的 tabset
    TFS 签入时,提示“变更集注释策略 中的内部错误……”
  • 原文地址:https://www.cnblogs.com/cloudplankroader/p/10394252.html
Copyright © 2011-2022 走看看