C ++ Установите вопрос ввода стирания
Вопрос
Я столкнулся с проблемой здесь. Я использую C ++ MultiSet. Это тестовый файл.
Score: 3-1
Ben
Steven
Score: 1-0
Ben
Score: 0-0
Score: 1-1
Cole
Score: 1-2
Ben
Я использую во время цикла и 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 (независимо от Wins / Loses / Draws) в моем последнем выступлете. Но мне нужны только имена этих матчей, которые выиграли / рисуют.
Эти имена, чьи спички потеряны, не будут включены в Myset. В тестовом файле выше, есть только один матч, который потерял (1-2), и я хотел удалить «бен». Как я могу это сделать?
Я пытался использовать myset.erase (), но я не уверен, как получить его указать в Бен и удалить его из Myset.
Любая помощь горячо приветствуется. Спасибо.
Решение
Если я понимаю, что вы пытаетесь сделать, я думаю, что было бы проще вспомнить, выиграла ли команда, нарисованная или потеряна, когда вы читаете линию «оценки» и вставьте только следующие строки (т. Е. Бен »), если Команда не потеряла. Вставив всех, а затем стирание, которые вы не хотели, кажется, незамедлительно :)
Для справки: если вам нужно стереть, вы бы использовали find()
член, чтобы найти запись, соответствующий данному ключу, а затем erase()
на возвращенном итераторе, чтобы удалить его (после проверки того, что find()
не вернул итератор, равный end()
, что означает, что товар не найден).
Кроме того, вы не должны проходить begin()
к insert()
. Отказ Итератор - это намек на то, где карта может вставить элемент; На практике это редко полезно. Существует перегрузка этой функции, которая принимает только один аргумент, элемент для вставки.
Другие советы
Создать Score
класс. Добавьте его не-члена operator>>()
Так что вы можете легко разобрать его. Тогда вам будет легко, чтобы вы могли вставить Score
объект в набор или нет:
if( scr.gained - scr.lost >= 0 )
myset.insert(myset.begin(), scr);