优先队列(priority_queue)的原理及用法
一、优先队列的原理及使用 std::priority_queue:在优先队列中,优先级高的元素先出队列,并非按照先进先出的要求,类似一个堆(heap)。其模板声明带有三个参数,priority_queue
priority_queue(),默认按照从小到大排列。所以top()返回的是最大值而不是最小值!
使用greater<>后,数据从大到小排列,top()返回的就是最小值而不是最大值!
如果使用了第三个参数,那第二个参数不能省,用作保存数据的容器!!!!
priority_queue
二、基本操作 优先队列在头文件#include
其声明格式为:priority_queue
基本操作有:
empty( ) //判断一个队列是否为空
pop( ) //删除队顶元素
push( ) //加入一个元素
size( ) //返回优先队列中拥有的元素个数
top( ) //返回优先队列的队顶元素
优先队列的时间复杂度为O(logn),n为队列中元素的个数,其存取都需要时间。
三、使用方法 #include
using namespace std;
int main()
{
vector
priority_queue
for (int i = 0; i < aa.size(); i++) {
pq.push(aa[i]);
}
sort(aa.begin(), aa.end());
for (int i = 0; i < aa.size(); i++)
cout << aa[i] << endl;
for (int i = 0; i < aa.size(); i++){
cout << pq.top() << endl;
pq.pop();
}
//cout << pq << endl;
system("pause");
return 0;
}