C++ Priority Queues
priority_queue 是“优先队列”。它和普通队列的区别在于,优先队列的队头元素总是最大的——即执行 pop 操作时,删除的总是最大的元素;执行 top 操作时,返回的是最大元素的引用。
priority_queue 是采用“堆技术”技术实现的,其内部并非完全有序,但却能确保最大元素总在队头。因此,priority_queue 特别适合用于不停的在一堆元素中取走最大的元素,priority_queue插入和删除元素的复杂度都是O(log(n))。它的队头元素只能被查看或者修改,不能被删除。
头文件
queue 和 priority_queue 都是容器适配器,要使用它们,必须包含头文件 。
#include<iostream>
#include<queue>
using namespace std;
成员函数
语法:
void push( const TYPE &val );
push()函数添加一个元素到优先队列中,值为val。
语法:
void pop();
pop()函数删除优先队列中的第一个元素。
语法:
size_type size();
size()函数返回优先队列中存储的元素个数
语法:
TYPE &top();
top()返回一个引用,指向优先队列中有最高优先级的元素。注意只有pop()函数删除一个元素。
语法:
bool empty();
empty()函数返回真(true)如果优先队列为空,否则返回假(false)。
#include<iostream>
#include<queue>
using namespace std;
int main()
{
priority_queue<double> pq;
pq.push(1.1);
pq.push(2.2);
pq.push(3.3);
pq.push(4.4);
pq.push(4.4);
while(!pq.empty()){
cout << pq.top() << " "; //输出队头
pq.pop(); //删除队头
}
cout << endl;
priority_queue<double,vector<double>,greater<double> > pq1;
pq1.push(3.3);
pq1.push(1.1);
pq1.push(3.3);
pq1.push(5.5);
pq1.push(4.4);
while(!pq1.empty()){
cout << pq1.top() << " "; //输出队头
pq1.pop(); //删除队头
}
cout << endl;
system("pause");
return 0;
}
输出结果: