Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

não deu de entender como funciona o codigo...

bool nao_acertou (std::string& palavra_secreta, const std::map<char, bool>& chutou) { for(char letra : palavra_secreta) { if(chutou.find(letra) == chutou.end() || !chutou.at(letra)) {...

O professor disse: que o "chutou.find(letra) == chutou.end()" estará buscando a "letra" em "chutou" e se encontrar essa letra na posição igual ao final desse mapa de chutes, quer dizer que ele nao encontrou em lugar nenhum... Mas eu realmente nao entendi o raciocinio por trás disso, talvez tenha faltado uma explicação do que exatamente essas palavras .find e .end fazem, a duvida em si seria: Como assim encontrar a letra na posição igual ao final do mapa chutes? o que é esse final? e como assim se encontrar a letra no final significa que não encontrou em lugar nenhum? eu boiei totalmente nessa parte da explicação, assisti essa mesma aula 5 vezes e ainda nao consegui entender como isso está funcionando

1 resposta
solução!

Olá Rennan!

A estrutura map funciona com chaves e valores. Cada chave (as letras do chute) leva a um valor unicamente. No caso, true ou false por serem valores booleanos. Ao iterar cada letra da palavra, ela é procurada no map com esse método find, que recebe a letra como argumento. O find retorna um iterador apontando para o local no map que contém essa letra. Os iteradores no C++ possuem dois métodos: begin e end, que retornam ponteiros para o início e o fim do map. Logo, pela documentação, se a letra não foi encontrada, ele irá retornar o end, indicando que não houve sucesso, já que ele percorreu todo o map.