每个元素都被赋予了优先级,访问元素时,只能访问队列中优先级最高的元素。
头文件
#include<queue>
定义
priority_queue<typename> name;
和栈一样,只能通过top()访问最高级元素
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
priority_queue<int> myPriorityQueue;
int main(){
myPriorityQueue.push(20);
myPriorityQueue.push(100);
myPriorityQueue.push(30);
myPriorityQueue.push(50);
cout<<myPriorityQueue.top()<<endl;//输出100
int sum=0;
while(!myPriorityQueue.empty()){
sum+=myPriorityQueue.top();
myPriorityQueue.pop();
}
cout<<sum;
}
复数集合 struct自定义类型的优先队列(重载+构造函数)

类定义
struct Complex{
int real;
int img;
Complex(int a,int b):real(a),img(b){}//构造函数
bool operator <(Complex c)const{ //重载
return real*real+img*img<c.real*c.real+c.img*c.img;
}
};
输入方法
else{
int a,b;
scanf("%d+i%d",&a,&b);//格式读入
mq.push(Complex(a,b));
cout<<"SIZE = "<<mq.size()<<endl;
}
哈夫曼树 给叶子结点权重求带权路径长度之和
带权路径之和即为所有非叶子节点的权值之和。

优先队列小顶堆的定义方法
priority_queue<typename,vector<typename>,greater<typename>> name;
样例和题解

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
int main(){
int n;
while(cin>>n){
priority_queue<int,vector<int>,greater<int>> pq;
while(n--){
int x;
cin>>x;
pq.push(x);
}
int answer=0;
while(pq.size()!=1){
int a=pq.top();
pq.pop();
int b=pq.top();
pq.pop();
answer+=a+b;
pq.push(a+b);
}
cout<<answer;
}
}
同上 哈夫曼树

本文介绍了如何利用C++标准库中的优先队列(priority_queue)进行元素访问,并展示了如何创建自定义类型的优先队列。通过实例展示了在哈夫曼树构建过程中优先队列如何用于计算带权路径长度之和。此外,还讨论了如何对复数集合进行操作。
1354

被折叠的 条评论
为什么被折叠?



