Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alpachino98 en 28 Diciembre 2017, 15:07 pm



Título: (STL) Listas e iteradores. No entiendo el error que me da.
Publicado por: alpachino98 en 28 Diciembre 2017, 15:07 pm
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:

Código:
	    if (*__first2 < *__first1) 

Aquí dejo los dos métodos que uso para añadir una palabra:
Código:
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();
}

}


Título: Re: (STL) Listas e iteradores. No entiendo el error que me da.
Publicado por: CalgaryCorpus en 28 Diciembre 2017, 18:30 pm
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.