Windows消息队列
2018-03-27 20:54
316 查看
Windows消息队列(25 分)
消息队列是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!最小堆应该是正解,恰好优先队列的内部排序是用堆实现的,所以,你懂的。。。
还有,这个题要用scanf,不然第三个点超时#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
struct me
{
int k;
char value[11];
friend bool operator <(const me &m1,const me &m2)//friend和'<',特别注意下
{
return m1.k>m2.k;//这里与sort的排序不一样,不是降序排序,而是一个最小堆
}
}m;
int main()
{
int n;
priority_queue<me> q;
char flag[4];
scanf("%d",&n);
while(n--)
{
scanf(" %s",flag);
if(flag[0]=='P')
{
scanf(" %s %d",m.value,&m.k);
q.push(m);
}
else
{
if(q.empty())
{
cout<<"EMPTY QUEUE!"<<endl;
}
else
{
cout<<q.top().value<<endl;
q.pop();
}
}
}
return 0;
}
相关文章推荐
- 又一篇关于windows消息队列比较好的文章
- windows 消息队列
- windows消息和消息队列
- Windows消息队列学习笔记
- 细说UI线程和Windows消息队列
- windows的消息队列与消息循环
- windows应用程序,操作系统,计算机硬件之间的相互关系———消息队列
- 移动矩形代码和一个非常重要的windows消息队列机制的坑
- Windows消息队列,UI线程,窗口以及消息处理方式总结 .
- windows消息和消息队列详解
- 【转】细说UI线程和Windows消息队列
- c# .net windows消息队列简单应用示例
- ZOJ 2724 Windows 消息队列 (优先队列)
- C# 使用 Windows 消息队列机制
- 细说UI线程和Windows消息队列
- Windows消息队列
- Windows消息响应机制之三:线程与消息队列 .
- windows消息和消息队列
- windows 7 下SYSTEM账户建立的MSMQ消息队列如何删除
- 消息队列的使用 RabbitMQ (二): Windows 环境下集群的实现与优化