我正在做關於足球的C++任務,並且遇到了地圖問題。C++ Map問題
我說我遇到的問題是,當我保存2個或更多的「中場」爲重點,甚至COUT數據顯示不同的,但是當我做第二個乘法 - >第二個值,它補充說:「起來」第一個>第二個值,並與它相乘。
E.g.
John midfielder 1
Steven midfielder 3
我有一個已經讀入playerPosition的程序。所以地圖是這樣的:
John 1 (Key, Value)
Steven 3 (Key, Value)
if(playerName == a->first && playerPosition == "midfielder")
{
cout << a->second*2000 << endl; //number of goals * $2000
}
因此,通過正確,程序應該輸出:
2000
6000
而是我越來越
2000
8000
所以,我假設它添加了1到3(導致4),並與2000年相乘,這是完全錯誤的...
我試過cout a-> first和a-> second在程序中,我得到:
John 1
Steven 3
但是在乘法之後,它完全不同。 任何想法?
謝謝。
編輯: 好的,我試試。我實際上是在計算每個職位領域的獎金。我已經將字段數據插入到地圖中,這裏是實際的代碼。
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++;
}
測試數據是:
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
我試過while循環過程中cout和我得到的輸出:
Ben 5
Cole 2
John 1
Steven 3
這應該是具有史蒂芬正確的輸出3個目標。但我得到4,加上約翰的。有沒有辦法將獎金分配給a-> first,這是玩家的名字?
您是否嘗試過其他輸入,如7和5? – kennytm 2010-05-17 15:58:48
我只是試圖將約翰分配給7和史蒂文到5,但它仍然將第一個值加到第二個乘法上。我嘗試了第三個「中場」並給它分配一個值。它也增加了第一個和第二個值... – Wallace 2010-05-17 16:07:12
發佈演示此問題的最小代碼。很多時候,人們在發佈之前使用這種技術發現問題。 :-) – 2010-05-17 16:13:29