【c++】STL里的priority_queue用法总结
程序员文章站
2022-07-12 16:40:13
...
1、头文件
#include<queue>
2、定义
与堆类似,加入新的数会自动维护顺序
priority_queue<int> p;
优先队列的时间复杂度为O(log n),n为队列中元素的个数
priority_queue<int,vector<int>,greater<int> > q; //降序
priority_queue<int,vector<int>,less<int> > q; //升序
常用方法:
top( ) //返回优先队列的队顶元素
pop( ) //删除队首元素
push( ) //加入一个元素
size( ) //返回队列中的元素个数
empty( ) //判断队列是否为空
3、优先输出大数据
priority_queue<Type, Container, Functional>
Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。
如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。
例如:
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<int> p;
p.push(1);
p.push(2);
p.push(8);
p.push(5);
p.push(43);
for(int i=0;i<5;i++){
cout<<p.top()<<endl;
p.pop();
}
return 0;
}
输出:
4、优先输出小数据
方法一:
priority_queue<int, vector<int>, greater<int> > p;
例如:
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<int, vector<int>, greater<int> >p;
p.push(1);
p.push(2);
p.push(8);
p.push(5);
p.push(43);
for(int i=0;i<5;i++){
cout<<p.top()<<endl;
p.pop();
}
return 0;
}
输出:
方法二:自定义优先级,重载默认的 < 符号
例子:
#include<iostream>
#include<queue>
#include<cstdlib>
using namespace std;
struct Node{
int x,y;
Node(int a=0, int b=0):
x(a), y(b) {}
};
struct cmp{
bool operator()(Node a, Node b){
if(a.x == b.x) return a.y>b.y;
return a.x>b.x;
}
};
int main(){
priority_queue<Node, vector<Node>, cmp>p;
for(int i=0; i<10; ++i)
p.push(Node(rand(), rand()));
while(!p.empty()){
cout<<p.top().x<<' '<<p.top().y<<endl;
p.pop();
}//while
//getchar();
return 0;
}
输出:
上一篇: STL的常用容器
下一篇: C++ & QT 琐碎知识点