第12课:单元实战:急诊室排队
进度 0/24
🏥
单元实战:急诊室排队
病情越急越先看,优先队列立大功!
📖知识引入
🏥场景建模
病人是元素,病情等级是优先级,小根堆自动排队
📋结构体入堆
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课完成!继续探索下一课吧 🚀
