c++stl之优先队列(priority_queue)

1.大跟堆:从小到大,最小的优先级最高定义方法:

priority_queue<int,vector<int>,greater<int> >vis;

注意vis左边> >这两个">"中间有个空格,不能少

2.小跟堆:从大到小,最大的优先级最高

定义方法:

priority_queue<int>vis;

基本跟队列相同,不同的是:

3.队列返回队头元素front(),优先队列返回优先级最高的元素top()

4.结构体定义方式:

struct sa
{
   
    int x,num;
};
bool operator<(const sa&a,const sa&b)
{
   
    if(a.x!=b.x)
        return a.x<b.x;//与平常相反,这里输出大到小排列
    else return a.num<b.num;
}
priority_queue<sa>vis2;

洛谷 P3378 【模板】堆

#include <bits/stdc++.h>
using namespace std;

priority_queue<int,vector<int>,greater<int> >vis;//大根堆从小到大
int a[10005];
int main()//
{
   
    int n,x,flag;
    while(~scanf("%d",&n))
    for(int i=0;i<n;i++)
    {
   
        scanf("%d",&flag);
        if(flag==1)
        {
   
            scanf("%d",&x);
            vis.push(x);
        }
        if(flag==2){
   cout<<vis.top()<<endl;}
        if(flag==3){
   vis.pop();}
    }

    return 0;
}

买饭-优先队列

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
priority_queue<int>vis;//小根堆从大到小
struct sa
{
   
    int val,num;
}a[1005];
bool cmp(sa b,sa c)
{
   
   if(b.val!=c.val)
   return b.val<c.val;
   else return b.num<c.num;
}
int main()//
{
   
    int n,x,flag;
    long long sum=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
   
        scanf("%d",&a[i].val);
        a[i].num=i
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值