Mapの値の検索
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 55/56。
チャレンジ
簡単マップ内の特定の値に関連付けられたすべてのキーを見つけるための、逆引きシステムを実装するプログラムを作成してください。このチャレンジでは、マップの反復処理、値の比較、およびベクターの構築を組み合わせて、キーと値のペアを効率的に検索する能力が試されます。
以下の入力が提供されます:
- マップに追加するキーと値のペアの数を示す整数
n - その後、以下の内容で構成される
nペアの入力:- キーを表す文字列
key - 値を表す整数
value
- キーを表す文字列
- 検索対象の値を示す整数
targetValue
プログラムは以下の手順で行ってください:
std::map<std::string, int>と整数をパラメータとして受け取るfindKeysWithValueという名前の関数を作成します。- この関数は、指定された値を持つすべてのキーを含む
std::vector<std::string>を返す必要があります。 - メイン関数でマップを作成し、入力されたキーと値のペアを格納します。
- マップとターゲット値を引数にして
findKeysWithValue関数を呼び出します。 - 最初に一致するキーの数を出力し、次に一致する各キーを個別の行に出力します。
以下の正確な出力形式を使用してください:
1行目 - 一致するキーの数:
Keys found: [number_of_matching_keys]次に、一致する各キーを個別の行に出力します:
[matching_key_1]
[matching_key_2]
...ターゲット値を持つキーがない場合は、以下のみを出力します:
Keys found: 0findKeysWithValue 関数は、新しい空のベクターを作成し、範囲ベースの for ループを使用してマップを反復処理し、if 文を使用して各ペアの値をターゲットと比較する必要があることに注意してください。一致が見つかった場合は、push_back() を使用してキー(pair.first を介してアクセス)を結果のベクターに追加します。関数は、一致するすべてのキーを含むベクターを返す必要があります。
自分で試してみよう
#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;
// TODO: ここに findKeysWithValue 関数を記述してください
int main() {
// キーと値のペアの数を読み込む
int n;
cin >> n;
// キーと値のペアを格納するマップを作成する
map<string, int> keyValueMap;
// n 個のキーと値のペアを読み込む
for (int i = 0; i < n; i++) {
string key;
int value;
cin >> key >> value;
keyValueMap[key] = value;
}
// 検索するターゲット値を読み込む
int targetValue;
cin >> targetValue;
// TODO: findKeysWithValue 関数を呼び出し、結果を保存してください
// TODO: 必要な形式で結果を出力してください
// 最初に "Keys found: [count]" を出力します
// 次に、一致する各キーを個別の行に出力します
return 0;
}