Windows訊息佇列
阿新 • • 發佈:2018-12-12
訊息佇列是Windows系統的基礎。對於每個程序,系統維護一個訊息佇列。如果在程序中有特定事件發生,如點選滑鼠、文字改變等,系統將把這個訊息加到隊列當中。同時,如果佇列不是空的,這一程序迴圈地從佇列中按照優先順序獲取訊息。請注意優先順序值低意味著優先順序高。請編輯程式模擬訊息佇列,將訊息加到佇列中以及從佇列中獲取訊息。
輸入格式:
輸入首先給出正整數N(≤105),隨後N行,每行給出一個指令——GET或PUT,分別表示從佇列中取出訊息或將訊息新增到佇列中。如果指令是PUT,後面就有一個訊息名稱、以及一個正整數表示訊息的優先順序,此數越小表示優先順序越高。訊息名稱是長度不超過10個字元且不含空格的字串;題目保證佇列中訊息的優先順序無重複,且輸入至少有一個GET。
輸出格式:
對於每個GET指令,在一行中輸出訊息佇列中優先順序最高的訊息的名稱和引數。如果訊息佇列中沒有訊息,輸出EMPTY QUEUE!。對於PUT指令則沒有輸出。
輸入樣例:
9
PUT msg1 5
PUT msg2 4
GET
PUT msg3 2
PUT msg4 4
GET
GET
GET
GET
輸出樣例:
msg2
msg3
msg4
msg1
EMPTY QUEUE!
程式碼如下:
#include <stdio.h>
#include<queue>
#include <algorithm>
using namespace std;
struct Listnode
{
char name[15];
int rank;
friend bool operator <(Listnode a,Listnode b)
{
return a.rank>b.rank;
}
};
priority_queue<Listnode>p;
int main()
{
int n;
scanf("%d",&n);
char str[5];
Listnode s;
while(n--)
{
scanf("%s", &str);
if(str[0]=='P')
{
scanf("%s %d",&s.name,&s.rank);
p.push(s);
}
else
{
if(p.size()==0)
printf("EMPTY QUEUE!\n");
else
{
Listnode ss=p.top();
p.pop();
printf("%s\n",ss.name);
}
}
}
return 0;
}