Encontré esta página que lo explica muy bien, y luego lo apliqué a un ejemplo práctico que ordena un vector que tiene datos de diferente tipo. De esta manera pueden ver cómo funciona el método sort con mis propias funciones de comparación.
Te aconsejo de leer el post que explica el sort y aquí te dejo mi código de ejemplo:
/* *** * Ordena.cpp - Ejemplifica como usar el sort en vectores * ***/#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;classPrueba{public:intdatoEntero;floatdatoFlotante;stringdatoString;Prueba();// Constructor defaultPrueba(int,float,string);// Constructor sobrecargadostringMuestraDatos();};// Constructor defaultPrueba::Prueba(){datoEntero=0;datoFlotante=0.0f;datoString="";}// Constructor sobrecargadoPrueba::Prueba(intentero,floatnumDecimal,stringtexto){datoEntero=entero;datoFlotante=numDecimal;datoString=texto;}// Devuelve una cadena con los valores en el objeto// Salida: una cadena con los valoresstringPrueba::MuestraDatos(){stringx=to_string(datoEntero).append(" - ").append(to_string(datoFlotante)).append(" - ").append(datoString);returnx;}// Función para comparar (usado en el sort)boolcompara1(Pruebaa,Pruebab){returna.datoEntero<b.datoEntero;}boolcompara2(Pruebaa,Pruebab){returna.datoFlotante<b.datoFlotante;}boolcompara3(Pruebaa,Pruebab){// compareTo devuelve un número, hagoa la expdresión para que devuelva// True o False.return(a.datoString.compare(b.datoString)<0);}intmain(){// Declarar el vectorvector<Prueba>lista;// Lleno el vector con datoslista.push_back(Prueba(1,2.0f,"primero"));lista.push_back(Prueba(7,2.5f,"segundo"));lista.push_back(Prueba(4,4.5f,"tercero"));lista.push_back(Prueba(3,6.33f,"cuarto"));lista.push_back(Prueba(5,1.8f,"quinto"));lista.push_back(Prueba(2,8.45f,"sexto"));// Muestro el contenido del vectorcout<<"Lista de elementos\n";for(Pruebaxx:lista){cout<<xx.MuestraDatos()<<endl;}// Ordeno la lista usando mi función para comparar// y muestro la lista ordenadasort(lista.begin(),lista.end(),compara1);cout<<"Lista de elementos ordenados por el dato entero\n";for(Pruebaxx:lista){cout<<xx.MuestraDatos()<<endl;}// Ordeno la lista de nuevo usando mis otras funciones// para comparar y muestro las listas resultantessort(lista.begin(),lista.end(),compara2);cout<<"Lista de elementos ordenados por el dato flotante\n";for(Pruebaxx:lista){cout<<xx.MuestraDatos()<<endl;}sort(lista.begin(),lista.end(),compara3);cout<<"Lista de elementos ordenados por el texto\n";for(Pruebaxx:lista){cout<<xx.MuestraDatos()<<endl;}}
No hay comentarios.:
Publicar un comentario