简介
Priorityqueue是一种容器适配器,它的第一个元素始终是容器中的最大值。
Priorityqueue作为容器适配器而实现,它是一种使用指定的容器类作为其潜在的容器存储元素,并提供一组元素操作函数的类。
Priorityqueue的潜在容器可以是标准容器类,也可以是通过特殊设计的容器类。这些容器类必须满足能随机访问且支持如下操作:
Ø front()
Ø push_back()
Ø pop_back()
标准容器vector和deque都能满足其要求。默认情况下,如果创建priority queue时没有指定容器类作为其潜在的容器,vector容器类将作为其默认的潜在类。
成员函数
priority_queue::priority_queue()
创建一个priority_queue容器适配器对象。
priority_queue::empty()
判断一个priority_queue是否为空,如果为空返回true,否则返回false。
priority_queue:size()
计算priority_queu中元素的个数。
priority_queue::top()
返回优先队列顶端的元素的引用。
priority_queue::push()
向优先队列中插入一个新的元素。
priority_queue::emplace()
向队列中插入一个元素,插入的元素有其构造函数构造。
priority_queue::pop()
删除队列顶端的元素。
priority_queue::swap()
交换两个队列中元素。
示例程序
#include <iostream>
#include <queue>
#include <deque>
#include <functional>
using namespace std;
class comparison{
public:
comparison(const bool& revparam = false)
{
reverse = revparam;
}
bool operator() (const int& m, const int& n) const
{
if(reverse){
return m > n;
}else{
return m < n;
}
}
private:
bool reverse;
};
int main(void)
{
int arr[] = {10, 50, 30, 20, 60};
// priority_queue::priority_queue()
priority_queue<int> first;
priority_queue<int> second(arr, arr+5);
priority_queue<int, vector<int>, greater<int>>
third(arr, arr+5);
priority_queue<int, vector<int>, comparison> fourth;
typedef priority_queue<int, vector<int>, comparison> pq_type;
pq_type firth(comparison());
pq_type sixth(comparison(true));
// priority_queue::empty()
if(second.empty()){
cout << "Second is empty." << endl;
}else{
cout << "Second is not empty." << endl;
}
// priority_queue::size()
cout << "The size of second : " << second.size() << endl;
// priority_queue::top()
cout << "second.top() is : " << second.top() << endl;
// priority_queue::push()
second.push(80);
// priority_queue::emplace()
second.emplace(100);
// priority_queue::pop()
cout << "second.top() is : " << second.top() << endl;
second.pop();
cout << "second.top() is : " << second.top() << endl;
// priority_queue::swap()
first.swap(second);
cout << "The size of first : " << first.size() << endl;
cout << "The size of second : " << second.size() << endl;
}