7-26 Windows消息队列 (25 分)(详解+思路+超时解决)
一:題目
消息隊列是Windows系統(tǒng)的基礎。對于每個進程,系統(tǒng)維護一個消息隊列。如果在進程中有特定事件發(fā)生,如點擊鼠標、文字改變等,系統(tǒng)將把這個消息加到隊列當中。同時,如果隊列不是空的,這一進程循環(huán)地從隊列中按照優(yōu)先級獲取消息。請注意優(yōu)先級值低意味著優(yōu)先級高。請編輯程序模擬消息隊列,將消息加到隊列中以及從隊列中獲取消息。
輸入格式:
輸入首先給出正整數(shù)N(≤10
?5
?? ),隨后N行,每行給出一個指令——GET或PUT,分別表示從隊列中取出消息或?qū)⑾⑻砑拥疥犃兄小H绻噶钍荘UT,后面就有一個消息名稱、以及一個正整數(shù)表示消息的優(yōu)先級,此數(shù)越小表示優(yōu)先級越高。消息名稱是長度不超過10個字符且不含空格的字符串;題目保證隊列中消息的優(yōu)先級無重復,且輸入至少有一個GET。
輸出格式:
對于每個GET指令,在一行中輸出消息隊列中優(yōu)先級最高的消息的名稱和參數(shù)。如果消息隊列中沒有消息,輸出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!
二:思路
用到了map 容器 ,那就簡單了,map有自動排序功能,這樣的話每次遇到GET 就將 第一個輸出來,同時將第一個刪除。
如果map容器不熟練請看鏈接:
https://blog.csdn.net/qq_48508278/article/details/118531197
三:上碼
#include<bits/stdc++.h> using namespace std;int main() {map<int,string>m;map<int,string>:: iterator t;//迭代器的使用 用于遍歷int N;cin >> N;for( int i = 0; i < N; i++ ){string str;cin >> str;if( str == "PUT"){string str1;int num;cin >> str1 >> num;m[num] = str1;}if( str == "GET"){if( t != m.end() && !m.empty()){t = m.begin();//指向map容器當中第一對元素cout << t->second << endl;t = m.find(t->first);m.erase(t);}else if(m.empty()){cout << "EMPTY QUEUE!" << endl;}}}}三:超時問題
以往做題經(jīng)驗:
1:多提交幾次,卡時間,有可能會卡過去;
2:將 cout 輸出改為 printf輸出
3: 將 cin 輸入改為 sacnf輸入
補充:如果還不行 那說明得回爐重造了, 本題是多提交幾次卡過去了。
加油陌生人
總結(jié)
以上是生活随笔為你收集整理的7-26 Windows消息队列 (25 分)(详解+思路+超时解决)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java当中编码和解码(以及出现乱编码的
- 下一篇: 什么是鼻咽炎