¿Cómo ordeno un vector STL basado en dos criterios de comparación diferentes? La función de ordenación predeterminada() solo tiene un único objeto clasificador.Ordenando un vector STL en dos valores
Respuesta
Necesita combinar los dos criterios en uno solo. Aquí hay un ejemplo de cómo ordenarías una estructura con un primer y segundo campo basado en el primer campo, luego en el segundo campo.
#include <algorithm>
struct MyEntry {
int first;
int second;
};
bool compare_entry(const MyEntry & e1, const MyEntry & e2) {
if(e1.first != e2.first)
return (e1.first < e2.first);
return (e1.second < e2.second);
}
int main() {
std::vector<MyEntry> vec = get_some_entries();
std::sort(vec.begin(), vec.end(), compare_entry);
}
NOTA: aplicación de compare_entry
actualizado para utilizar el código de Nawaz.
+1, Adelante hacia adelante. Pensé de la misma manera. Pero aún duda si el OP está pensando en las mismas líneas. – iammilind
Genial, funcionó, ¡gracias! Olvidé la parte if (e1.first == e2.first), así que estaba fallando para mí. – toastie
@Michael: agregué otra implementación de la función 'compary_entry'. Espero que esté bien contigo. :-) +1 BTW. – Nawaz
- 1. ¿Cómo ordenar un vector STL?
- 2. Copiar valores de mapa a vector en STL
- 3. reducir la capacidad de un vector stl
- 4. OpenMP y STL vector
- 5. Posición en Vector utilizando STL
- 6. Tamaño de vector de STL
- 7. Ordenando el vector de punteros
- 8. Ordenando dos matrices correspondientes
- 9. STL: almacena referencias o valores?
- 10. ¿Un buen C equivalente al vector STL?
- 11. La forma más rápida de escribir un vector STL grande en un archivo usando STL
- 12. Ordenando valores dobles en JTable
- 13. STL thrust multiple vector transform?
- 14. reemplazar valores en un vector basado en otro vector
- 15. intersección de dos mapas STL
- 16. Fusionar dos vectores STL con un patrón de alternancia
- 17. ¿Puedo hacer aritmética de puntero en un STL :: vector :: iterator
- 18. Combinar dos mapas STL
- 19. vector STL frente a borrado de mapa
- 20. Vector de STL y seguridad de hilo
- 21. Iteración sobre el vector bidimensional STL C++
- 22. Valores devueltos de la función contenedor STL
- 23. ¿Cómo puedo ordenar un std :: vector por los valores de un std :: vector diferente?
- 24. C++ STL vector: push_back tomando como referencia
- 25. Ordenando una lista de un tipo personalizado
- 26. usando STL para encontrar todos los elementos de un vector
- 27. stl vector y C++: cómo .resize sin un constructor predeterminado?
- 28. ¿Cómo llenar un vector con valores iniciales no triviales?
- 29. ¿Cómo agregar elemento por elemento de dos vectores STL?
- 30. STL Multimap Eliminar/Borrar valores
¿Puedes elaborar más? ¿Qué criterios quieres? – iammilind
Más información –
Estoy ordenando una lista de objetos con dos propiedades diferentes: distancia e importancia. Una de las comparaciones de estas propiedades (mayor importancia) anula a la otra (distancia más cercana). Entonces, si las importancias de un objeto son 1 y la otra es 0, se ordenará más que el segundo, incluso si la distancia es mayor. No puedo encontrar una manera de hacerlo con solo una comparación. – toastie