Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;地图问题 我正在做关于足球的C++作业,我遇到了一个地图问题。_C++_Map_Multimap - Fatal编程技术网

C++;地图问题 我正在做关于足球的C++作业,我遇到了一个地图问题。

C++;地图问题 我正在做关于足球的C++作业,我遇到了一个地图问题。,c++,map,multimap,C++,Map,Multimap,我遇到的问题是,当我存储两个或多个“中场球员”作为键时,即使是cout数据也会显示不同,但当我对第二个->第二个值进行乘法时,它会将第一个->第二个值“相加”并与之相乘 例如 我有一个程序已经在playerPosition中读取。所以地图是这样的: John 1 (Key, Value) Steven 3 (Key, Value) if(playerName == a->first && playerPosition == "midfielder") { cout

我遇到的问题是,当我存储两个或多个“中场球员”作为键时,即使是cout数据也会显示不同,但当我对第二个->第二个值进行乘法时,它会将第一个->第二个值“相加”并与之相乘

例如

我有一个程序已经在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
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++;
}
我在while循环中尝试cout,结果是:

Ben 5
Cole 2
John 1
Steven 3

这应该是正确的输出,史蒂文有3个目标。但我得了4分,加上约翰的。有没有办法将奖金分配给a->first,这是玩家的名字?

我在你的代码中没有看到任何会导致你得到奖金的东西。显然还有更多的事情可以解释这一点,特别是因为你的if似乎只适用于一名球员。

middfielderbonus+=(a->second*2000)


所以+=意味着它将累积数据。我想当你换到下一个球员时,你可能忘记了一个中场球员Bonus=0。有点难说,因为您包含的代码片段没有显示奖金变量的初始化。

您是否尝试过其他输入,如7和5?我只是尝试将John指定为7,将Steven指定为5。但它仍然将第一个值与第二个值相加并相乘。我试着把第三个“中场”放进去,给它赋值。它也将第一个和第二个值加起来…发布演示问题的最小代码。很多时候,人们在发布之前使用此技术发现问题。:-)是
playerName
/
playerposition
std::string还是char*?如果是char*,则必须使用strcmp()
(或将其更改为std::string)它们是字符串,而不是char*。我的代码相当长,因此我不确定是否可以将它们全部粘贴到这里。或者我可以上传我的脚本,让任何有帮助的人都能看到它有什么问题?我只是想问一下是否有人遇到过类似的问题和解决方案。以下是我的代码,其中包含了测试数据和预期结果。我的作业已经完成了一半多,我被困在了这一部分,我不能把它做好。如果上传文件不合适,让我知道,我会把它取下来。你不需要提供所有的代码,只需要重要的部分。明确地提供地图定义,以及生成
a
迭代器的代码。现在跳过地图人口。我会解决这个问题的。问题在于+=,正如前面许多人所说的那样。我将这个特殊奖金分配给另一个变量,并通过将所有其他奖金相加来计算总奖金。谢谢你的帮助。你们太棒了:)如果问题解决了,你们可能想结束这个问题。或者你可以继续得到答案。对不起,我如何结束这个问题?我刚开始使用这个社区。每个答案旁边都有一个复选框。你可以点击它来接受答案。或者,如果你自己解决了这个问题,你可以将你的解决方案作为答案发布,并接受它。
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
Ben 5
Cole 2
John 1
Steven 3