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,等待初学者自己去发现哟,嘻嘻嘻/*-*

 

原文地址:https://www.cnblogs.com/cloudplankroader/p/10394252.html