メッセージキューは、Windowsシステムの基盤です。プロセスごとに、システムはメッセージキューを維持します。マウスクリック、テキストの変更など、プロセス中に特定のイベントが発生した場合、システムはこのメッセージをキューに追加します。同時に、キューが空でない場合、プロセスは優先度に従ってキューからメッセージを周期的に取得します。優先度の値が低いと、優先度が高くなることに注意してください。プログラムを編集して、メッセージキューをシミュレートし、メッセージをキューに追加して、キューからメッセージを取得してください。
入力形式:
入力は最初に正の整数N(≤105)を与え、次にN行、各行は命令を与えます-GETまたはPUT、つまりキューからメッセージを取り出すか、キューにメッセージを追加します、それぞれ。コマンドがPUTの場合、メッセージ名とメッセージの優先度を示す正の整数があります。数値が小さいほど、優先度が高くなります。メッセージ名は、10文字以内でスペースを含まない文字列です。タイトルは、キュー内のメッセージの優先順位が繰り返されないこと、および入力に少なくとも1つのGETがあることを保証します。
出力形式:
GET命令ごとに、メッセージキュー内で優先度が最も高いメッセージの名前とパラメータを1行で出力します。メッセージキューにメッセージがない場合は、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
空のキュー!
マップキーは繰り返しを許可せず(同じ優先度のメッセージがないことを確認するためにタイトルに記載されています)、昇順で自動的に保存される(現在最も優先度の高いメッセージを簡単に取得できる)という機能を利用します。 )、出力されたメッセージは削除されます。削除
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, string> mp;
int n, id, cnt = 0;
string msg, opt;
cin >> n;
while (n--) {
cin >> opt;
if (opt == "PUT") {
cin >> msg >> id;
mp[id] = msg;
cnt++;
} else if (opt == "GET") {
if (cnt <= 0)
cout << "EMPTY QUEUE!\n";
else {
cout << mp.begin()->second << endl;
mp.erase(mp.begin());
cnt--;
}
}
}
return 0;
}