Frage

begegnete ich hier ein Problem. Ich verwende C ++ multiset. Dies ist die Testdatei.

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

Ich bin mit while-Schleife und ifstream (fin1) oben in der Testdatei zu lesen.

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

Ich bin Einfügen alle Namen in MYSET (unabhängig davon, gewinnt / verliert / Unentschieden) in meiner letzten else-Anweisung. Aber ich verlange nur die Namen derjenigen, die Matches gewonnen / zeichnen.

Diese Namen, deren verlorene Spiele werden nicht in MYSET enthalten sein. In der Testdatei oben, dann ist es nur ein Spiel, dass verloren (1-2) und ich wollte „Ben“ entfernen. Wie kann ich das tun?

Ich habe versucht, myset.erase () zu verwenden, aber ich bin nicht sicher, wie es Ben Punkt zu bringen und es von MYSET entfernen.

Jede Hilfe ist sehr geschätzt. Danke.

War es hilfreich?

Lösung

Wenn ich verstehe, was Sie versuchen, zu tun, ich denke, es wäre einfacher, sich daran zu erinnern, ob das Team gewonnen hatte, gezogen oder verloren, wenn Sie die „Score“ Zeile gelesen und nur fügen Sie die folgenden Zeilen (dh. „Ben „), wenn das Team nicht verloren hat. Einfügen von jeder und dann zu löschen, die Sie nicht wollen, scheint mir zu kompliziert:)

Referenz: Wenn Sie Bedarf an Lösch tun, würden Sie das find() Mitglied verwenden, um einen Eintrag suchen Sie einen bestimmten Schlüssel übereinstimmt, und dann erase() auf dem Iterator zurück, sie zu löschen (nachdem diese find() Überprüfung hat eine nicht zurück Iterator gleich zu end(), die das Element bedeutet, wurde nicht gefunden).

Außerdem sollten Sie nicht begin() zu insert() passieren. Der Iterator ist ein Hinweis darauf, wo die Karte das Element einfügen könnte; in der Praxis, die nur selten nützlich. Es ist eine Überlastung dieser Funktion, die nur ein Argument, das Element einzufügen nimmt.

Andere Tipps

Erstellen Sie eine Score Klasse. Fügen Sie es ein Nicht-Mitglied operator>>(), so dass Sie es leicht analysieren kann. Dann wird es einfach sein für Sie entscheiden, ob ein Score Objekt in den Satz eingefügt werden oder nicht:

if( scr.gained - scr.lost >= 0 )
    myset.insert(myset.begin(), scr);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top