Menu
CoddyTech

Map 值搜索

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 55 课,共 56 课。

challenge icon

挑战

简单

创建一个程序,实现反向查找系统,用于查找映射中与特定值关联的所有键。本挑战将测试你结合遍历映射、比较值和构建向量,高效搜索键值对的能力。

程序将收到以下输入:

  • 一个整数 n,表示要添加到映射中的键值对数量
  • 接着是 n 组输入,每组包含:
    • 一个字符串 key,表示键
    • 一个整数 value,表示值
  • 一个整数 targetValue,表示要查找的值

你的程序应当:

  1. 创建一个名为 findKeysWithValue 的函数,该函数接受一个 std::map<std::string, int> 和一个整数作为参数
  2. 该函数应返回一个 std::vector<std::string>,其中包含所有具有指定值的键
  3. 在主函数中,创建一个映射,并用输入的键值对填充它
  4. 使用该映射和目标值调用 findKeysWithValue 函数
  5. 先输出匹配键的数量,然后将每个匹配的键分别输出到单独一行

请使用以下准确的输出格式:

第一行,匹配键的数量:

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 来存储键值对
    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;
}

逻辑与流程中的所有课

自己练习: C++ 在线编译器