山野千里,你是我藏在星星里的浪漫。
C++优先队列:
基本操作:
empty( ) //是否为空
pop( ) //删除队顶元素
top( ) //返回优先队列的队顶元素
push( ) //加入一个元素
size( ) //返回优先队列中拥有的元素个数
优先队列的时间复杂度为O(logn),n为队列中元素的个数,其存取都需要时间。
priority_queue 默认为大根堆
例:
#include<iostream>
#include<queue>
#include<ctime>
#include <cstdlib>
using namespace std;
int main(){
srand(time(NULL));
priority_queue<int> pq; //声明一个优先队列
for(int i = 0; i < 10; ++i){
int num = rand()%100;
pq.push(num); //随机数字进队列
cout << "insert" << num << " in priority queue." <<endl;
}
while(!pq.empty()){
cout << pq.top() << " "; //打印队头元素
pq.pop();//打印之后出队
}
return 0;
}
运行结果:
小根堆
如需要最小堆的话只需要更改参数即可:
将:
priority_queue<int> pq;
改成
priority_queue<int, vector<int>, greater<int>> pq;
自定义比较方法例:
#include<iostream>
#include<queue>
#include<ctime>
#include <cstdlib>
using namespace std;
struct myCmp{
bool operator()(int x, int y){
return x%10 > y%10; //小的优先级高,按照个位数字从小到大排序
}
};
int main(){
srand(time(NULL));
priority_queue<int, vector<int>, myCmp> pq;
for(int i = 0; i < 10; ++i){
int num = rand()%100;
pq.push(num);
cout << "insert" << num << " in priority queue." <<endl;
}
while(!pq.empty()){
cout << pq.top() << " ";
pq.pop();
}
return 0;
}
运行结果: