Je travaille sur mon devoir C++ sur le football et j'ai rencontré un problème avec map. Mon problème que j'ai rencontré est que quand j'ai stocké 2 ou plus "milieux de terrain" comme la clé, même les données de cout montre différent, mais quand je fais une multiplication sur la 2ème -> deuxième valeur, il "additionne" la première -> deuxième valeur et multiplier avec elle.C++ Carte Question
E.g.
John midfielder 1
Steven midfielder 3
J'ai un programme qui lit déjà dans playerPosition. Donc, la carte va comme ceci:
John 1 (Key, Value)
Steven 3 (Key, Value)
if(playerName == a->first && playerPosition == "midfielder")
{
cout << a->second*2000 << endl; //number of goals * $2000
}
Ainsi, en droit, le programme devrait sortie:
2000
6000
Mais au lieu, je reçois
2000
8000
Alors, je suppose il ajoute le 1 à 3 (résultant en 4) et en multipliant par 2000, ce qui est totalement faux ...
J'ai essayé cout a-> premier et un-> deuxième dans le programme et je reçois:
John 1
Steven 3
Mais après la multiplication, c'est totalement différent. Des idées?
Merci.
Editer: Ok, j'essaie. Je calcule réellement le bonus pour chaque champ de position. J'ai déjà inséré les données de terrain dans la carte et voici les codes réels.
multiset<string, less<string> >::iterator q, p = myset.begin();
q = myset.begin()++;
while (p != myset.end())
{
if(*p == *q)
{
currentScore = (int) myset.count(*p);
mymap.insert(pair<string, int>(*p, currentScore));
}
else if(*p != *q && topScore == 0)
{
topScore = (int) myset.count(*q);
topScorer = *q;
mymap.insert(pair<string, int>(*q, topScore));
}
else if(*p != *q)
{
currentScore = (int) myset.count(*p);
mymap.insert(pair<string, int>(*p, currentScore));
if(currentScore > topScore)
{
topScore = currentScore;
topScorer = *p;
mymap.insert(pair<string, int>(*p, topScore));
}
}
p++;
}
map<string, int>::iterator a = mymap.begin();
while(a != mymap.end())
{
if(playerName == a->first && playerPosition == "goalkeeper")
{
goalkeepers++;
goalkeeperBonus+=(a->second*5000);
sumBonus+=goalkeeperBonus;
}
else if(playerName == a->first && playerPosition == "midfielder")
{
midfielders++;
midfielderBonus+=(a->second*2000);
sumBonus+=midfielderBonus;
}
a++;
}
Les données de test:
Score: 3-1
Ben
Steven
Ben
Score: 2-0
John
Steven
Score: 1-0
Ben
Score: 0-0
Score: 1-1
Cole
Score: 1-2
Ben
Score: 3-0
Cole
Steven
Ben
J'ai essayé de cout pendant la boucle while et je me suis sortie comme:
Ben 5
Cole 2
John 1
Steven 3
Cela devrait être la sortie correcte avec Steven ayant 3 buts Mais je reçois 4, ajouté avec John. Est-il possible d'attribuer le bonus à l'a-> premier qui est le nom du joueur?
Avez-vous essayé d'autres entrées comme 7 et 5? – kennytm
J'ai juste essayé d'assigner John à 7 et Steven à 5. Mais il ajoute toujours la première valeur à la seconde et multiplie. J'ai essayé de mettre le 3ème "milieu de terrain" et lui assigner une valeur. Il ajoute la première et la deuxième valeur à cela aussi ... – Wallace
Publiez le code minimal qui illustre le problème. Plusieurs fois, les gens trouvent le problème en utilisant cette technique avant de poster. :-) –