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