码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1873 看病要排队 —— priority_queue 的使用

时间:2020-03-17 21:00:50      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:bsp   show   str   bool   color   lse   empty   nbsp   stl   

题目描述

http://acm.hdu.edu.cn/showproblem.php?pid=1873

代码示例

#include<queue>
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
struct person {
    int id, num;//编号,优先级
};
//先定义结构体,再写重载函数定义优先级比较简单明了 
bool operator < (const person &a, const person &b) {//重载 "<" 操作符定义优先级
    if (a.num == b.num)//当级别相同时从小到大排序 
        return a.id > b.id;
    else
        return a.num < b.num;//当级别不同是从大到小排序 
}
int main() {
    int n;
    while (cin >> n) {
        priority_queue<person>doctors[4];
        int id = 1, docIndex, num;
        string str;
        person temPer;
        while (n--) {
            cin >> str >> docIndex;
            if (str == "IN") {
                cin >> temPer.num;
                temPer.id = id++;//储存病人的编号
                doctors[docIndex].push(temPer);//把病人入相应医生队列
            }
            else {
                if (!doctors[docIndex].empty()) {//有病人在诊断 
                    temPer = doctors[docIndex].top();
                    doctors[docIndex].pop();
                    cout << temPer.id << endl;
                }
                else
                    cout << "EMPTY" << endl;
            }
        }
    }
}

知识点

STL 中,优先队列是用二叉堆来实现的,往队列中 push 或 pop 一个数,复杂度是 O(log n)。例如图论中的 Dijkstra 算法的程序实现,用 STL 中的优先队列能极大地简化代码。

例子

说明

priority_queue<Type> pq; 

定义优先队列,Type为数据类型,如int,float,char 或结构体等

q. push(item);

插入新元素

q.top(); 

返回具有最高优先级的元素值,但不删除该元素

q.pop();

删除最高优先级元素

HDU 1873 看病要排队 —— priority_queue 的使用

标签:bsp   show   str   bool   color   lse   empty   nbsp   stl   

原文地址:https://www.cnblogs.com/bjxqmy/p/12513311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!