Domanda

Ho riscontrato un problema qui. Sto usando C ++ multiset. Questo è il file di prova.

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

Sto utilizzando ciclo while e ifstream (FIN1) per leggere dal file di prova di cui sopra.

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);
        }
    }
}

sto inserendo tutti i nomi in myset (a prescindere di vittorie / perde / pareggi) nel mio ultimo else. Ma ho bisogno solo i nomi di quelle partite che ha vinto / disegnare.

Quei nomi le cui partite perse non saranno incluse nella myset. Nel file di test di cui sopra, c'è una sola partita che ha perso (1-2) e volevo rimuovere "Ben". Come posso fare?

Ho cercato di usare myset.erase (), ma non sono sicuro di come farlo puntare a Ben e rimuoverlo dal myset.

Ogni aiuto è molto apprezzato. Grazie.

È stato utile?

Soluzione

Se ho capito quello che stai cercando di fare, penso che sarebbe più facile da ricordare se la squadra aveva vinto, disegnato o perso quando si legge la linea "Score" e solo inserire le seguenti linee (es. "Ben ") se la squadra non ha perso. Inserimento di tutti e poi quelli cancellazione non volevi sembra troppo complicata per me:)

Per riferimento: Se si ha bisogno di cancellare, si può usare il membro find() per individuare una voce corrispondente una data chiave, e poi erase() sul iteratore restituito per eliminarlo (dopo aver verificato che find() non ha prodotto un iteratore uguale a end(), il che significa che l'elemento non è stato trovato).

Inoltre, non si deve passare a begin() insert(). L'iteratore è un suggerimento su dove mappa potrebbe inserire l'oggetto; in pratica, che è raramente utile. C'è un sovraccarico di quella funzione che prende un solo argomento, l'elemento da inserire.

Altri suggerimenti

Creare una classe Score. Aggiungere un operator>>() non membro in modo da poter analizzare facilmente. Allora sarà facile per voi a decidere se inserire un oggetto Score nella serie oppure no:

if( scr.gained - scr.lost >= 0 )
    myset.insert(myset.begin(), scr);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top