Question

Je rencontre un problème. J'utilise le multiset de C. Ceci est le fichier de test.

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

J'utilise en boucle et ifstream (fin1) à lire dans le fichier de test ci-dessus.

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

J'insérer tous les noms dans MONJEU (quel que soit gagne / perd / nuls) dans ma dernière déclaration d'autre. Mais je demande que le nom de ces rencontres qui ont gagné / dessiner.

Les noms dont les matchs perdus ne seront pas inclus dans MONJEU. Dans le fichier de test ci-dessus, il n'y a qu'un seul match qui a perdu (1-2) et je voulais enlever « Ben ». Comment puis-je faire?

J'ai essayé d'utiliser myset.erase (), mais je ne suis pas sûr de savoir comment pointer vers Ben et le retirer de MONJEU.

Toute aide est très appréciée. Merci.

Était-ce utile?

La solution

Si je comprends ce que vous essayez de faire, je pense qu'il serait plus facile de se rappeler si l'équipe avait gagné, dessiné ou perdu lorsque vous lisez la ligne « Score » et seulement insérer les lignes suivantes (ie. « Ben « ) si l'équipe n'a pas perdu. Insertion tout le monde et les effacer tu ne voulais pas me semble trop compliqué à:)

Pour référence: Si vous avez besoin d'effacer, utilisez l'élément find() pour localiser une entrée correspondant à une clé donnée et erase() puis sur le itérateur retourné à supprimer (après avoir vérifié que find() n'a pas retourné un itérateur égalent à end(), ce qui signifie que l'article n'a pas été trouvé).

En outre, vous ne devriez pas passer begin() à insert(). L'itérateur est une indication quant à l'endroit où la carte peut insérer l'élément; dans la pratique qui est rarement utile. Il y a une surcharge de cette fonction qui prend un seul argument, l'élément à insérer.

Autres conseils

Créer une classe Score. Ajoutez un operator>>() non membres afin que vous puissiez analyser facilement. Ensuite, il sera facile pour vous de décider si vous souhaitez insérer un objet Score dans le jeu ou non:

if( scr.gained - scr.lost >= 0 )
    myset.insert(myset.begin(), scr);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top