Menu
Coddy logo textTech

Поиск значений в Map

Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 55 из 56.

challenge icon

Задание

Легко

Создайте программу, реализующую систему обратного поиска для нахождения всех ключей, связанных с определенным значением в словаре (map). Это задание проверит ваше умение сочетать итерацию по словарю, сравнение значений и создание вектора для эффективного поиска по парам ключ-значение.

Будут предоставлены следующие входные данные:

  • Целое число n, представляющее количество пар ключ-значение, которые нужно добавить в словарь
  • Затем n пар входных данных, каждая из которых состоит из:
    • Строки key, представляющей ключ
    • Целого числа value, представляющего значение
  • Целое число targetValue, представляющее значение для поиска

Ваша программа должна:

  1. Создать функцию с именем findKeysWithValue, которая принимает std::map<std::string, int> и целое число в качестве параметров
  2. Функция должна возвращать std::vector<std::string>, содержащий все ключи, имеющие указанное значение
  3. В функции main создать словарь и заполнить его входными парами ключ-значение
  4. Вызвать функцию findKeysWithValue со словарем и целевым значением
  5. Сначала вывести количество найденных ключей, а затем вывести каждый найденный ключ на отдельной строке

Используйте следующий точный формат вывода:

Первая строка — количество найденных ключей:

Keys found: [number_of_matching_keys]

Затем каждый найденный ключ на отдельных строках:

[matching_key_1]
[matching_key_2]
...

Если ни один ключ не имеет целевого значения, выведите только:

Keys found: 0

Помните, что ваша функция findKeysWithValue должна создать новый пустой вектор, перебрать словарь с помощью цикла for на основе диапазона (range-based for loop) и использовать оператор if для проверки значения каждой пары на соответствие целевому. При обнаружении совпадения добавьте ключ (доступный через pair.first) в результирующий вектор с помощью push_back(). Функция должна вернуть вектор, содержащий все найденные ключи.

Попробуйте сами

#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;
}

Все уроки раздела Логика и управление потоком