Menu
Coddy logo textTech

Mapの値の検索

CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 55/56。

challenge icon

チャレンジ

簡単

マップ内の特定の値に関連付けられたすべてのキーを見つけるための、逆引きシステムを実装するプログラムを作成してください。このチャレンジでは、マップの反復処理、値の比較、およびベクターの構築を組み合わせて、キーと値のペアを効率的に検索する能力が試されます。

以下の入力が提供されます:

  • マップに追加するキーと値のペアの数を示す整数 n
  • その後、以下の内容で構成される n ペアの入力:
    • キーを表す文字列 key
    • 値を表す整数 value
  • 検索対象の値を示す整数 targetValue

プログラムは以下の手順で行ってください:

  1. std::map<std::string, int> と整数をパラメータとして受け取る findKeysWithValue という名前の関数を作成します。
  2. この関数は、指定された値を持つすべてのキーを含む std::vector<std::string> を返す必要があります。
  3. メイン関数でマップを作成し、入力されたキーと値のペアを格納します。
  4. マップとターゲット値を引数にして findKeysWithValue 関数を呼び出します。
  5. 最初に一致するキーの数を出力し、次に一致する各キーを個別の行に出力します。

以下の正確な出力形式を使用してください:

1行目 - 一致するキーの数:

Keys found: [number_of_matching_keys]

次に、一致する各キーを個別の行に出力します:

[matching_key_1]
[matching_key_2]
...

ターゲット値を持つキーがない場合は、以下のみを出力します:

Keys found: 0

findKeysWithValue 関数は、新しい空のベクターを作成し、範囲ベースの 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;
}

論理と制御フローのすべてのレッスン