题
我在这里遇到了一个问题。我使用C ++多集。这是测试文件。
Score: 3-1
Ben
Steven
Score: 1-0
Ben
Score: 0-0
Score: 1-1
Cole
Score: 1-2
Ben
我使用while循环和ifstream的(FIN1),以在从上述试验文件中读取。
multiset<string, less<string> > myset;
while(!fin1.eof())
{
fin1 >> scoreName;
if(scoreName == "Score:")
{
//calculates number of matches played
}
else
{
goalCheck = scoreName.substr(1,1);
if(goalCheck == "-")
{
string lGoal, rGoal;
lGoal = scoreName.substr(0,1);
rGoal = scoreName.substr(2,1);
int leftGoal, rightGoal;
leftGoal = atoi(lGoal.c_str());
rightGoal = atoi(rGoal.c_str());
if(leftGoal > rightGoal) //if team wins
{
//some computations
}
else if(leftGoal < rightGoal) //if team loses
{
//computations
}
else if(leftGoal == rightGoal) //if team draws
{
//computations
}
else
{
myset.insert(myset.begin(), scoreName);
}
}
}
我将所有的名字到MYSET(无论胜/输/平),在我最后的else语句。但我只需要这些谁赢得了比赛的名称/画。
这些名字,其匹配的损失将不会被包含在MYSET。在上面的测试文件,只有一个比赛失去(1-2),我想删除“本”。我该怎么办呢?
我试图用myset.erase(),但我不知道如何得到它指向Ben和从MYSET删除它。
任何帮助十分赞赏。 感谢。
解决方案
如果我理解你想要做什么,我认为这将是更容易记住队是否赢了,绘制或丢失,当你阅读了“分数”行,只有插入以下行(即“本“),如果球队并没有失去。插入每一个人,那么你不想删除那些似乎过于复杂的对我说:)
有关参考:如果您确实需要擦除,你可以使用find()
成员找到匹配给定键的条目,然后erase()
对返回的迭代器将其删除(检查find()
后没有返回一个迭代器等于到end()
,这意味着该项目未发现)。
此外,你不应该传递给begin()
insert()
。迭代器是一个提示,在地图上可以插入项;在实践中是很少有用。有其中只有一个参数,该项目以插入该函数的一个过载。
其他提示
创建Score
类。它添加一个非会员operator>>()
这样你就可以轻松地分析它。然后,它会很容易为你决定是否插入Score
对象进入设置或不:
if( scr.gained - scr.lost >= 0 )
myset.insert(myset.begin(), scr);
不隶属于 StackOverflow