C++;地图问题 我正在做关于足球的C++作业,我遇到了一个地图问题。
我遇到的问题是,当我存储两个或多个“中场球员”作为键时,即使是cout数据也会显示不同,但当我对第二个->第二个值进行乘法时,它会将第一个->第二个值“相加”并与之相乘 例如 我有一个程序已经在playerPosition中读取。所以地图是这样的: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
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