Поиск значений в Map
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 55 из 56.
Задание
ЛегкоСоздайте программу, реализующую систему обратного поиска для нахождения всех ключей, связанных с определенным значением в словаре (map). Это задание проверит ваше умение сочетать итерацию по словарю, сравнение значений и создание вектора для эффективного поиска по парам ключ-значение.
Будут предоставлены следующие входные данные:
- Целое число
n, представляющее количество пар ключ-значение, которые нужно добавить в словарь - Затем
nпар входных данных, каждая из которых состоит из:- Строки
key, представляющей ключ - Целого числа
value, представляющего значение
- Строки
- Целое число
targetValue, представляющее значение для поиска
Ваша программа должна:
- Создать функцию с именем
findKeysWithValue, которая принимаетstd::map<std::string, int>и целое число в качестве параметров - Функция должна возвращать
std::vector<std::string>, содержащий все ключи, имеющие указанное значение - В функции main создать словарь и заполнить его входными парами ключ-значение
- Вызвать функцию
findKeysWithValueсо словарем и целевым значением - Сначала вывести количество найденных ключей, а затем вывести каждый найденный ключ на отдельной строке
Используйте следующий точный формат вывода:
Первая строка — количество найденных ключей:
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;
}Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров