我在这里遇到了一个问题。我使用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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top