Pergunta

Eu encontrei um problema aqui. Estou usando o multiset C ++. Este é o arquivo de teste.

Score: 3-1 
Ben
Steven
Score: 1-0 
Ben
Score: 0-0
Score: 1-1 
Cole
Score: 1-2
Ben

Estou usando o While Loop e o IFStream (FIN1) para ler no arquivo de teste acima.

multiset<string, less<string> > myset;

while(!fin1.eof())
{

fin1 >> scoreName;

if(scoreName == "Score:")                                               
{
    //calculates number of matches played
}
else
{
    goalCheck = scoreName.substr(1,1);
    if(goalCheck == "-")
    {
        string lGoal, rGoal;
        lGoal = scoreName.substr(0,1);
        rGoal = scoreName.substr(2,1);

        int leftGoal, rightGoal;
        leftGoal = atoi(lGoal.c_str());
        rightGoal = atoi(rGoal.c_str());

        if(leftGoal > rightGoal)   //if team wins
        {
            //some computations
        }
        else if(leftGoal < rightGoal)   //if team loses
        {
            //computations
        }
        else if(leftGoal == rightGoal)   //if team draws
        {
            //computations
        }
        else
        {
            myset.insert(myset.begin(), scoreName);
        }
    }
}

Estou inserindo todos os nomes no MySet (independentemente de vitórias/perdas/desenhos) na minha última declaração. Mas eu só preciso dos nomes daqueles jogos que venceram/desenham.

Aqueles nomes cujas partidas perderam não serão incluídas no MySet. No arquivo de teste acima, há apenas uma partida que perdeu (1-2) e eu queria remover "Ben". Como eu posso fazer isso?

Tentei usar myset.erase (), mas não tenho certeza de como obtê -lo apontando para Ben e removê -lo do MySet.

Qualquer ajuda é muito apreciada. Obrigado.

Foi útil?

Solução

Se eu entendi o que você está tentando fazer, acho que seria mais fácil lembrar se a equipe havia vencido, desenhado ou perdido quando você leu a linha "Score" e apenas insira as seguintes linhas (ou seja. "Ben") se A equipe não perdeu. Inserir a todos e depois apagar aqueles que você não queria parece ser supercomplicado para mim :)

Para referência: se você precisar apagar, você usaria o find() membro para localizar uma entrada correspondente a uma determinada chave e depois erase() no iterador devolvido para excluí -lo (depois de verificar isso find() não retornou um iterador igual a end(), o que significa que o item não foi encontrado).

Além disso, você não deve passar begin() para insert(). O iterador é uma dica de onde o mapa pode inserir o item; Na prática, isso raramente é útil. Há uma sobrecarga dessa função que leva apenas um argumento, o item a ser inserido.

Outras dicas

Crie um Score classe. Adicione um não-membro operator>>() Então você pode analisá -lo facilmente. Então será fácil para você decidir se deve inserir um Score Objeto no conjunto ou não:

if( scr.gained - scr.lost >= 0 )
    myset.insert(myset.begin(), scr);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top