AIZU ONLINE JUDGE

AOJ ITP2 8_B(Map: Delete)を解く

AOJ_ITP2_8_B

Aizu Online Judge(AOJ)が提供している「プログラミング応用」(ITP2)の8_B問題をC++で解いてみました。

ITP2では、「プログラミングのための基礎ライブラリを獲得します」とあります。トピック#8では、辞書(map コンテナ)を学びます。

問題(8_B: Map: Delete)

問題はリンク先をご覧ください。

AOJ ITP2 8_B問題: Map: Delete

Map コンテナについて学びます。

Map コンテナについて

以下は、cpprefjp 様の記事を参考にさせていただきました。

Map コンテナについての概要と主なメソッドは、8_A で紹介しています。

C++ プログラム例(ITP2 8_B)

問題で与えられるクエリに従い、キーを文字列とする辞書 M に対して、以下の操作を行います。8_A と比較してクエリ2が追加されています。またクエリ1の仕様も変更されています。

  • クエリ0 キーが key で値が x である要素をコンテナ M に挿入する。キーが key である要素がすでに存在している場合は、要素の値を x に更新する。
  • クエリ1 キーが key である値を出力する。ただし、そのような要素がない場合は、0 を出力する。
  • クエリ2 キーが key である要素をコンテナ M から削除する。

以下が、C++プログラムとなります。

#include <iostream>
#include <map>

using namespace std;

int main()
{
	map<string, int> M;

	int q;
	cin >> q;

	for (int i = 0; i < q; ++i) {
		int command;
		cin >> command;
		if (command == 0) {
			string key;
			int x;
			cin >> key >> x;
			M[key] = x;
		} else if (command == 1) {
			string key;
			cin >> key;
			if (M.count(key) == 0) {
				cout << 0 << endl;
			} else {
				cout << M[key] << endl;
			}
		} else if (command == 2) {
			string key;
			cin >> key;
			M.erase(key);
		}
	}

	return 0;
}

上記プログラムは、AOJ で「AC(Accepted=正解)」と判定されました。

最後に

Map(連想配列) は、Set と同じく erase も対数時間で効率よく処理できます。

引き続き、ITP2 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA