3
respostas

[Dúvida] Inicialização do map

Boas pessoal, Não consegui entender como o map foi inicializado com a palavra MELANCIA. Em nenhum momento vi uma associação deste vetor de string ao map. O programa está funcionando normalmente no meu computador, mas a minha dúvida é para o entendimento mesmo.

Abs

3 respostas

Olá, Tudo bem?

Em C++, um map é uma estrutura de dados que armazena pares de chave-valor. Quando você menciona a palavra "MELANCIA", parece que você está se referindo a como uma string ou vetor de strings está sendo associada a um map.

Para inicializar um map com valores, você geralmente precisa fazer algo assim:

#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, int> fruitMap;
    fruitMap["MELANCIA"] = 1; // Associando a chave "MELANCIA" ao valor 1

    // Acessando o valor associado à chave "MELANCIA"
    std::cout << "MELANCIA: " << fruitMap["MELANCIA"] << std::endl;

    return 0;
}

Nesse exemplo, o map chamado fruitMap é inicializado, e a chave "MELANCIA" é associada ao valor 1. Se você não viu essa associação explicitamente no código, pode ser que ela esteja acontecendo em alguma parte que não foi destacada, ou talvez esteja sendo feita de uma maneira mais implícita.

Se a palavra "MELANCIA" está sendo utilizada como chave, verifique onde no código ela está sendo associada a algum valor no map. Pode ser que exista uma função ou um trecho de código que esteja fazendo isso automaticamente.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Obrigado Armano,

Eu não tinha colocado o código da aula que eu estava fazendo, faltou isso para dar sentido a minha pergunta. No código abaixo, temos uma constante de string PALAVRA_SECRETA que recebe a palavra "MELANCIA". Também temos um map com o nome chutou para guardar o vetor de caracteres "MELANCIA" associado a uma informação de true ou false, para saber se aquele caractere já tinha sido chutado antes.

A minha dificuldade é encontrar em que ponto do código é feito o carregamento do vetor de caracteres "M E L A N C I A" no map chutou, assim como os valores false inicialmente no chutou também.

Segue o código da aula

#include #include #include #include using namespace std;

const string PALAVRA_SECRETA = "MELANCIA"; map<char, bool> chutou; vector chutes_errados;

bool letra_existe(char chute){ for(char letra : PALAVRA_SECRETA){ if(chute == letra){ return true; } } return false; }

bool nao_acertou(){ for(char letra : PALAVRA_SECRETA){ if(!chutou[letra]){ return true; } } return false; }

bool nao_enforcou(){ return chutes_errados.size() < 5; }

void imprime_cabecalho(){ cout << "" << endl; cout << "* Jogo da Forca ***" << endl; cout << "**" << endl; cout << endl; }

void imprime_erros(){ cout << "Chutes errados: "; for(char letra: chutes_errados){ cout << letra << " "; } cout << endl; }

void imprime_palavra(){ for(char letra : PALAVRA_SECRETA){ if(chutou[letra]){ cout << letra << " "; } else{ cout << "_ "; } } cout << endl; }

void chuta(){ cout << "Seu chute: "; char chute; cin >> chute;

chutou[chute] = true;

if(letra_existe(chute)){
    cout << "Você acertou! Seu chute está na palavra." << endl;
}
else{
    cout << "Você errou! Seu chute não está na palavra." << endl;
    chutes_errados.push_back(chute);
}
cout << endl;

}

int main () { imprime_cabecalho();

while(nao_acertou() && nao_enforcou()){
    imprime_erros();

    imprime_palavra();

    chuta();
}

cout << "Fim de jogo!" << endl;
cout << "A palavra secreta era: " << PALAVRA_SECRETA << endl;
if(nao_acertou()){
    cout << "Você perdeu! Tente novamente!" << endl;
}
else{
    cout << "Parabéns! Você acertou a palavra secreta!" << endl;
}

}

Oi, Estanislau! Joia?

O map chutou é inicializado dinamicamente durante a execução. No código, você não vê um carregamento explícito de todas as letras com valores false porque o próprio C++ inicializa o valor como false para cada nova chave acessada.

Veja como isso funciona:

  • Quando você faz uma verificação, como if (!chutou[letra]), o C++ cria automaticamente a chave letra no map chutou e a inicializa com false caso ela ainda não exista.
  • Quando você faz chutou[chute] = true; dentro da função chuta(), você está marcando que essa letra foi tentada, então chutou[chute] passa a ser true.

Com base no que você explicou, o código se aproveita desse comportamento automático, então não é necessário inicializar manualmente cada letra de PALAVRA_SECRETA com false.

Fico à disposição e bons estudos!