Busca de Valores em Mapas
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 55 de 56.
Desafio
FácilCrie 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
nrepresentando o número de pares chave-valor a serem adicionados ao mapa - Em seguida,
npares de entradas, cada um consistindo em:- Uma string
keyrepresentando a chave - Um número inteiro
valuerepresentando o valor
- Uma string
- Um número inteiro
targetValuerepresentando o valor a ser pesquisado
Seu programa deve:
- Criar uma função chamada
findKeysWithValueque recebe umstd::map<std::string, int>e um número inteiro como parâmetros - A função deve retornar um
std::vector<std::string>contendo todas as chaves que possuem o valor especificado - Na função principal, criar um mapa e preenchê-lo com os pares chave-valor de entrada
- Chamar a função
findKeysWithValuecom o mapa e o valor alvo - 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: 0Lembre-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
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa