🐵指尖猴全新升级
第12课:单元实战:急诊室排队
🏥

单元实战:急诊室排队

病情越急越先看,优先队列立大功!

📖知识引入

🏥场景建模
病人是元素,病情等级是优先级,小根堆自动排队
📋结构体入堆
pair<等级, 编号>直接入堆,或自定义struct配比较器
⚡动态插队
新病人随时push,叫号永远pop堆顶,秩序不乱
🧠建模心法
看到“优先级+动态进出”八个字,条件反射想到优先队列
💡
pair入堆先比first再比second,把优先级放在first就能自动排好队

🔍急诊室叫号系统

#include <queue>
#include <cstdio>
using namespace std;

int main() {
    // 小根堆:pair<病情等级, 病人编号>
    priority_queue<pair<int,int>, vector<pair<int,int>>,
                   greater<pair<int,int>>> q;
    q.push({1, 1024});  // 抢救级
    q.push({3, 2048});  // 普通
    q.push({2, 3072});  // 急诊级
    while (!q.empty()) {
        printf("请%d号病人就诊\n", q.top().second);
        q.pop();        // 依次叫号:1024 → 3072 → 2048
    }
    return 0;
}

病情等级越小越紧急,小根堆保证最急的病人永远排在最前。

🎯小测验

第1题:急诊室排队最适合用什么结构?

第2题:pair<int,int>入小根堆时先比较哪个?

第3题:新病人到达时应该做什么?

📝本课知识点

  • ✓优先级问题找优先队列
  • ✓pair优先级放first
  • ✓push/pop动态维护
第12课完成!继续探索下一课吧 🚀