Pregunta

Me encontró un problema aquí. Estoy usando C ++ conjunto múltiple. Este es el archivo de prueba.

Score: 3-1 
Ben
Steven
Score: 1-0 
Ben
Score: 0-0
Score: 1-1 
Cole
Score: 1-2
Ben

Estoy usando while y ifstream (FIN1) para leer desde el archivo de prueba anterior.

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);
        }
    }
}

Estoy insertando todos los nombres en MYSET (independientemente de victorias / pierde / empates) en mi última declaración más. Pero yo sólo necesito los nombres de los partidos que ganaron / dibujar.

Los nombres cuyos partidos perdidos no se incluirán en MYSET. En el archivo de prueba anterior, sólo hay un partido que perdió (1-2) y quería quitar "Ben". ¿Cómo puedo hacer eso?

He intentado utilizar myset.erase (), pero no estoy seguro de cómo conseguir que apunte a Ben y sacarlo de MYSET.

Cualquier ayuda es muy apreciada. Gracias.

¿Fue útil?

Solución

Si entiendo lo que estás tratando de hacer, creo que sería más fácil de recordar si el equipo había ganado, elaborado o se pierde cuando se lee la línea "Puntuación" y sólo insertar las siguientes líneas (es decir. "Ben ") si el equipo no ha perdido. Inserción de todo el mundo y luego borrar los que no quería parece excesivamente complicado para mí:)

A modo de referencia: Si lo hace necesidad de borrar, se utilizaría el miembro find() para encontrar una entrada que coincide con una clave dada, y luego erase() en el iterador devuelto a eliminarla (después de comprobar que find() no arrojó un iterador equivalen a end(), lo que significa no se encontró el elemento).

Además, no debe dárselo a begin() insert(). El iterador es una pista sobre dónde el mapa podría insertar el elemento; en la práctica que es rara vez son útiles. Hay una sobrecarga de esa función que toma sólo un argumento, el elemento de inserción.

Otros consejos

Crea una clase Score. Añadir un operator>>() no miembros para que pueda analizar fácilmente. Entonces será fácil para que decida si desea insertar un objeto Score en el conjunto o no:

if( scr.gained - scr.lost >= 0 )
    myset.insert(myset.begin(), scr);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top