여기에서 문제가 발생했습니다. C++ 멀티 세트를 사용하고 있습니다. 이것은 테스트 파일입니다.C++ Set 항목 지우기 질문
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);
}
}
}
나는 내 마지막 else 문의 요소인지에 모든 이름을 (에 관계없이 승// 손실 무)에 삽입하고있다. 하지만 우승 한 선수의 이름 만 필요합니다.
일치 항목이 손실 된 이름은 myset에 포함되지 않습니다. 위 테스트 파일에는 잃어버린 (1-2) 파일이 하나뿐이므로 "Ben"을 제거하려고합니다. 어떻게해야합니까?
나는 myset.erase()를 사용하려고 시도했으나 Ben을 가리키고 myset에서 제거하는 방법을 모르겠습니다.
어떤 도움
이 많이 감사합니다. 감사합니다. .
@Peter : 네, 맞습니다. 팀이 우승하거나 그려진 경우 득점 한 선수의 이름이 필요합니다. 팀이 졌으면 점수를 얻은 선수의 이름을 요구하지 않을 것입니다. 이렇게하는 간단한 방법이 있습니까? 나는 모든 이름을 삽입하고 잃어버린 그 이름들을 지우는 것이 복잡하다는 것을 안다. – Wallace
@Wallace 실제로 그것은 전혀 복잡하지 않습니다. 그것은 당신이 당신의 세트를 크게 가질 것입니다. 그리고 나서 당신은 그것을 축소시킬 것이고, 그래서 그것은 성능 벌칙입니다. 그렇게하기 위해 제거 - 삭제 관용구를 적용합니다 : 한 줄의 코드. – wilhelmtell
팀이 승리했는지, 그리고 당겼는지 나타내는 bool 플래그를 유지하고, 팀이이기거나 끌 때'true'로 설정하고 잃는다면'false'로 설정할 수 있습니다. 그런 다음 해당 플래그가 true 인 경우에만 삽입하십시오. 분명히 루프 외부에서 선언 할 필요가 있기 때문에 반복 할 필요가 없습니다. – Peter