优先队列的用法

介绍

英文名-priority_queue队首元素为当前优先级最高的

访问

只能通过top()函数来访问队首元素

#include 
#include //调用queue头文件
using namespace std;
int main(){
    priority_queue<int> pq1;//定义:默认数字越大优先级越高,相当于priority_queue,less> pq2
    
    //vector-用来承载堆的容器,相当于按数字越小优先级越高的整型队列
    priority_queue<int,vector<int>,greater<int>> pq2;
    cout<<pq1.top()<<endl;//访问
    return 0;
}
常用函数

1.push(x):将x入队
2.top():获得队首元素
3.empty():判断是否为空
4.size():返回队内元素个数

#include 
#include //调用queue头文件
using namespace std;
int main(){
    priority_queue<int> pq;
    priority_queue<int,vector<int>,greater<int>> q;
    for(int i=0;i<5;i++)
    {
        pq.push(i);//top取到最大
        q.push(i);//top取到最小
    }
    cout<<pq.top()<<" "<<q.top()<<endl;
    return 0;
}

实例

通过水果的价格为水果进行排序,输出价格最便宜的水果
1.通过重载符号实现

#include 
#include 
using namespace std;
struct fruit{
    string name;
    double price;
    friend bool operator < (fruit a,fruit b){//将整型的<符号重载为fruit中的>符号,使得默认大数字优先改为小数字优先
        return a.price>b.price;
    }
}f1,f2;
int main(){
    priority_queue<fruit> q;
    cin>>f1.name>>f1.price>>f2.name>>f2.price;
    q.push(f1);
    q.push(f2);
    cout<<q.top().name<<" "<<q.top().price<<endl;
    return 0;
}

2.通过外部结构体函数实现

#include 
#include 
using namespace std;
struct fruit{
    string name;
    double price;
}f1,f2;
struct cmp{//结构体封装()运算符
    bool operator () (fruit a,fruit b){
    return a.price>b.price;
    }
};
int main(){
    priority_queue<fruit,vector<fruit>,cmp> q;
    cin>>f1.name>>f1.price>>f2.name>>f2.price;
    q.push(f1);
    q.push(f2);
    cout<<q.top().name<<" "<<q.top().price<<endl;
    return 0;
}```

你可能感兴趣的:(小白进阶,算法)