2010-05-17 74 views
0

我正在做關於足球的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,這是玩家的名字?

+0

您是否嘗試過其他輸入,如7和5? – kennytm 2010-05-17 15:58:48

+0

我只是試圖將約翰分配給7和史蒂文到5,但它仍然將第一個值加到第二個乘法上。我嘗試了第三個「中場」並給它分配一個值。它也增加了第一個和第二個值... – Wallace 2010-05-17 16:07:12

+0

發佈演示此問題的最小代碼。很多時候,人們在發佈之前使用這種技術發現問題。 :-) – 2010-05-17 16:13:29

回答

2

midfielderBonus+=(a->second*2000);

這樣+ =意味着它將積聚的數據。我假設你在移動到下一位球員時會忘記midfielderBonus=0。很難說,因爲你包含的代碼片段並沒有顯示獎金變量的初始化。

+0

我會解決這個問題。問題在於+ =,正如許多其他人早就說過的那樣。我將此特殊獎金分配給另一個變量,並通過將所有其他獎勵加在一起來計算總體獎金。 感謝您的幫助。你們都很棒:) – Wallace 2010-05-17 17:40:02

+0

如果問題解決了,你可能想關閉這個問題。或者你可能會繼續得到答案。 – Lorenz03Tx 2010-05-17 17:45:01

+0

對不起,但我該如何解決這個問題?我剛開始使用這個社區。 – Wallace 2010-05-17 18:27:03

0

我在您的包含代碼中看不到任何東西會導致您所得到的東西。當然有更多的事情可以解釋它,特別是因爲你的if應該看起來只適用於一名球員。

+0

我的代碼相當長,所以我不確定我是否可以在這裏粘貼它們。或者,也許我可以上傳我的劇本,這樣任何有用的靈魂都可以看到它有什麼問題?只是想問問是否有人遇到類似的問題和解決方案。 – Wallace 2010-05-17 16:11:45

+0

下面是我的代碼,其中包含測試數據和預期結果。 http://www.mediafire.com/?kzyuizlgi4y 我已經超過了我的任務的一半,我被困在這部分,我不明白它的權利。 如果上傳的文件不合適,讓我知道,我會把它記下來。 – Wallace 2010-05-17 16:15:22

+0

你不需要提供所有的代碼,只需要重要的部分。絕對提供你的地圖定義,以及生成你的'a'迭代器的代碼。跳過地圖人口現在。 – 2010-05-17 16:18:12