(STL) Listas e iteradores. No entiendo el error que me da.

Iniciado por alpachino98, 28 Diciembre 2017, 15:07 PM

0 Miembros y 1 Visitante están viendo este tema.

alpachino98

Creo que no termino de entender esto de los iteradores porque no entiendo que error que me da, si alguien me puede decir que es lo que entendido mal...El programa es un diccionario, formado por dos clases: la clase palabra y la clase diccionario. La clase diccionario es una list formada de palabras. Mi error viene cuando intento añadir una nueva palabra al diccionario y me salta este error:

[Error] no match for 'operator<' (operand types are 'Palabra' and 'Palabra')

Y se abre una pagina con esto escrito:

    if (*__first2 < *__first1)

Aquí dejo los dos métodos que uso para añadir una palabra:
bool Diccionario::encuentraPalabra(const string &s, list<Palabra>::iterator &pos)
{
bool encontrado=false;
Palabra aux;
pos=listapal.begin();
while (pos!=listapal.end())
{
aux=*pos;
if(aux.getContenido()==s)
{
encontrado=true;
break;
}
pos++;
}

return encontrado;
}

void Diccionario :: anyadePalabra(const string &s)
{
list<Palabra>::iterator pos;
Palabra aux;
bool existe;
existe=encuentraPalabra(s, pos);
if(existe==true)
{
aux=*pos;
aux.incNumApariciones();
}

else //el error esta aqui
{
listapal.insert(pos,aux);
listapal.sort();
}

}


CalgaryCorpus

Intentas ordenar las palabras, la STL solo provee del algoritmo que usa el operador < entre 2 palabras, pero estas encargado de proveerlo. Si no lo tienes, el compilador lo nota y te reclama.

Agrega un operator< que tome 2 palabras y devuelva un bool comparando las 2 palabras tal como tu las has definido, usando el criterio que tu quieras.
Aqui mi perfil en LinkedIn, invitame un cafe aqui