优先队列_大小根堆__声明方式

优先级详解见注释

#include<bits/stdc++.h>
#define lint long long int
using namespace std;

struct Node{
    int id, val;
};

// operator < 指的是优先级
// 你有两个结构体 node a node b
// a < b 的意思是 a 的优先级比 b 小 
bool operator < (Node a, Node b)
{
    // 在里面定义什么叫做优先级更小
    // 这个的意思其实是
    // 如果  a.val > b.val 返回 true
    // 否则返回 false

    // true 就代表 a < b (a 的优先级比 b 小)
    // false 就代表 a 的优先级较大
    return a.val > b.val;
}

priority_queue <Node> q;

signed main(){

    int n;
    cin >> n;
//  for(int i=1; i<=n; i++)
//  {
//      int x, y;
//      cin >> x >> y;
//      // id is x   val is y
//      q.push({x, y});
//  }
//  cout << q.top().id << " " << q.top().val;

    Node x = {1, 100};
    Node y = {2, 200};

    // 如果 x < y (比较优先级) 
    if(x < y) 

    bool cmp(int x, int y)
    {
        return x < y;
    }
    // sort : 优先级小的在前面
    // priority_queue : 优先级大的在前面
    // priority_queue 可以支持动态加点,动态取队首
    //单次的复杂度是 O(log n) 
    // 动态加点:q.push(...)  O(log n)
    //  动态取队首: q.top()  O(1)
    // 动态取队首 <=> 取当前队列中,优先级最高的
    // q.pop() O(log n)就是弹队首 弹完之后,优先级第二大的会变成队首 
    sort(a+1, a+n+1, cmp);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值