C ++ Set Erase Entry domanda
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.
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);