0

サッカーに関するC++の割り当てに取り組んでいますが、マップで問題が発生しました。

私が遭遇した問題は、2つ以上の「ミッドフィールダー」をキーとして保存すると、coutデータでも異なって表示されますが、2番目-> 2番目の値で乗算を行うと、最初の値->を「加算」することです。 2番目の値とそれを掛けます。

例えば

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を掛けると仮定していますが、これは完全に間違っています...

プログラムで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を取得しており、Johnのものが追加されています。プレイヤーの名前であるa->firstにボーナスを割り当てる方法はありますか?

4

2 に答える 2

2

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

つまり、+= はデータを蓄積することを意味します。midfielderBonus=0次のプレーヤーに移動するときに、ある時点でa を忘れていると思います。あなたが含めたコードスニペットはボーナス変数の初期化を示していないので、わかりにくいです。

于 2010-05-17T17:21:02.313 に答える
0

含まれているコードには、あなたが得ているものを引き起こすものは何もありません。もちろん、特にあなたの if は一見1人のプレーヤーにしか適用されないはずなので、それを説明する可能性があることは明らかです。

于 2010-05-17T16:07:51.037 に答える