隊列(優先隊列 結構體)


TonyY 有幸進入銀行實習, 作為一名櫃台職員, 他的任務就是在正確的時間
為正確的人服務。
每個來銀行的人, 都有一個 vip 值, TonyY 需要做到每服務完一個客戶后,
找出隊列中 vip 值最高的人為他服務,之后被服務的人離開隊列。在他為客戶服
務的過程中,隨時都會有新的客戶來排隊。現在他想知道,每次叫號的時候,叫
到的人會是誰。
★數據輸入
輸入第一行為一個正整數 N(0<N<=100000),表示操作數。
接下來 N 行, 每行一個操作。
“PUT name num”表示有一個新客戶進入隊列, vip 值為 num
(0<length(name)<=20, 0<num<=10^9, name 中只會有大小寫字母)。
“GET” 表示 TonyY 要叫號了。
輸入數據保證所有人的 vip 值兩兩不一致。
★數據輸出
每次叫號時, 輸出被叫到號的人的名字, 如果當時沒人排隊,輸出一行
“Sleep!”。

#include <stdio.h>  
#include <iostream>  
#include <algorithm> 
#include <vector>  
#include <queue> 
#include <string>  
using namespace std;
struct custom
{
    string name;
    int vip;
    bool operator < (const custom &c) const
    {
        return vip<c.vip;
    }
}ct;

priority_queue<custom>    q;
int main()
{
    string op,name;
    int n,i,j,vip;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        cin>>op;
        if(op=="PUT")
        {
            cin>>ct.name>>ct.vip;
            q.push(ct);
        }
        else if(op=="GET")
        {
            if(q.size()!=0)
            {
                ct = q.top();
                cout<<ct.name<<endl;
                q.pop();
            }
            else
                cout<<"Sleep!"<<endl;
        }
    }
    return 0;
}
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM