Menu
Coddy logo textTech

Busca de Valores em Mapas

Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 55 de 56.

challenge icon

Desafio

Fácil

Crie um programa que implemente um sistema de busca reversa para encontrar todas as chaves associadas a um valor específico em um mapa. Este desafio testará sua habilidade de combinar iteração de mapa, comparação de valores e construção de vetores para pesquisar pares chave-valor de forma eficiente.

As seguintes entradas serão fornecidas:

  • Um número inteiro n representando o número de pares chave-valor a serem adicionados ao mapa
  • Em seguida, n pares de entradas, cada um consistindo em:
    • Uma string key representando a chave
    • Um número inteiro value representando o valor
  • Um número inteiro targetValue representando o valor a ser pesquisado

Seu programa deve:

  1. Criar uma função chamada findKeysWithValue que recebe um std::map<std::string, int> e um número inteiro como parâmetros
  2. A função deve retornar um std::vector<std::string> contendo todas as chaves que possuem o valor especificado
  3. Na função principal, criar um mapa e preenchê-lo com os pares chave-valor de entrada
  4. Chamar a função findKeysWithValue com o mapa e o valor alvo
  5. Imprimir primeiro a contagem de chaves correspondentes e, em seguida, imprimir cada chave correspondente em uma linha separada

Use o seguinte formato de saída exato:

Primeira linha - contagem de chaves correspondentes:

Keys found: [number_of_matching_keys]

Em seguida, cada chave correspondente em linhas separadas:

[matching_key_1]
[matching_key_2]
...

Se nenhuma chave tiver o valor alvo, imprima apenas:

Keys found: 0

Lembre-se de que sua função findKeysWithValue deve criar um novo vetor vazio, iterar pelo mapa usando um loop for baseado em intervalo (range-based for loop) e usar uma instrução if para verificar o valor de cada par em relação ao alvo. Quando uma correspondência for encontrada, adicione a chave (acessada via pair.first) ao vetor de resultado usando push_back(). A função deve retornar o vetor contendo todas as chaves correspondentes.

Experimente você mesmo

#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;

// TODO: Escreva sua função findKeysWithValue aqui

int main() {
    // Lê o número de pares chave-valor
    int n;
    cin >> n;
    
    // Cria um mapa para armazenar os pares chave-valor
    map<string, int> keyValueMap;
    
    // Lê n pares chave-valor
    for (int i = 0; i < n; i++) {
        string key;
        int value;
        cin >> key >> value;
        keyValueMap[key] = value;
    }
    
    // Lê o valor alvo para pesquisar
    int targetValue;
    cin >> targetValue;
    
    // TODO: Chame sua função findKeysWithValue e armazene o resultado
    
    // TODO: Imprima os resultados no formato exigido
    // Primeiro imprima "Keys found: [count]"
    // Depois imprima cada chave correspondente em linhas separadas
    
    return 0;
}

Todas as lições de Lógica & Fluxo