Windowsメッセージキュー(25ポイント)(非常に短いコードマップの練習)

メッセージキューは、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;
}

おすすめ

転載: blog.csdn.net/weixin_45845039/article/details/112968967