赞
踩
消息队列是 windows 系统的基础。对于每个进程,系统维护一个消息队列。如果这个过程发生了一些事情,比如鼠标点击、文本更改,系统将向队列添加一条消息。同时,如果队列不为空,进程将根据优先级值从队列中获取消息。注意,优先级越低,优先级越高。在这个问题中,要求您模拟消息队列,以便将消息放入消息队列并从消息队列获取消息。
输入中只有一个测试用例。每一行都是一个命令,GET
或 PUT
,意思是获取消息或放置消息。如果命令是PUT
,则有一个字符串表示消息名称,两个整数表示参数和优先级。最多有 60000
个命令。请注意,一条消息可以出现两次或两次以上,如果两条消息具有相同的优先级,则最先出现的消息将首先被处理。FIFO
优先级相同。)处理到文件结束。
对于每个 GET
命令,输出从消息队列中获得的命令,并将名称和参数放在一行中。如果队列中没有消息,则输出 EMPTY queue !
,PUT
命令没有输出。
GET
PUT msg1 10 5
PUT msg2 10 4
GET
GET
GET
EMPTY QUEUE!
msg2 10
msg1 10
EMPTY QUEUE!
截止后通关代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
struct node
{
char str[50];
int k;
int num;
int id;
friend bool operator<(node a,node b )
{
if(a.id !=b.id )
return a.id>b.id;
else
return a.num >b.num ;
}
}dp;
char s[10];
priority_queue<node>qu;
int main()
{
int num=1;
while(scanf("%s",s)!=EOF)
{
if(s[0]=='G')
{
if(!qu.empty())
{
node s1;
s1=qu.top();
printf("%s %d\n",s1.str,s1.k);
qu.pop();
}
else
{
printf("EMPTY QUEUE!\n");
}
}
else
{
node z;
z.num =num++;
scanf("%s %d %d",z.str,&z.k,&z.id );
qu.push(z);
}
}
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。