Ordenar matriz de cadenas en cpp usando std: sort
Estoy tratando de ordenar matrices (sí, no vectores) de cadenas, siguiendo algunas sugerencias de sitios como este . Este es el código que escribí hasta ahora, pero siempre imprime este error largo (que no tiene resultados en Google). ¿Cómo se puede arreglar esto?
#include <algorithm>
#include <cstring>
#include <iostream>
//qsort(names, n, 15, (int (*)(const void *, const void *))strcmp);
int main()
{
std::cout << "hi";
char arr[3][6];
strcpy(arr[0], "hello"), strcpy(arr[1], "hillo"), strcpy(arr[2], "hallo");
std::sort(arr, arr + 3, [](char const *lhs,
char const *rhs) { return strcmp(lhs, rhs) < 0; });
//qsort(arr, 3, 20, (int (*)(const void *, const void *))strcmp);
for (int i = 0; i < 3; ++i)
std::cout << arr[i] << '\n';
}
Respuestas
Esta es la parte relevante del mensaje de error:
error: la matriz debe inicializarse con un inicializador entre llaves
Lo cual no está muy claro desafortunadamente, pero viene de dentro de la implementación de clasificación. Entonces, revisemos las condiciones previas del algoritmo:
std::sortse implementa intercambiando elementos. Como tal, requiere que los elementos sean intercambiables. Los elementos de su matriz son matrices. Las matrices no se pueden intercambiar. Por lo tanto, una matriz de matrices no se puede ordenar.
¿El uso del tipo "cadena" funcionará aquí?
El uso std::stringfuncionará. Es intercambiable. Ni siquiera necesitará una función de comparación personalizada porque es incluso comparable.
lo que hace que las matrices no sean intercambiables y otros tipos intercambiables
El intercambio se complementa con la inicialización (y asignación) del movimiento. Las reglas del lenguaje dicen que la matriz no es inicializable por movimiento (ni asignable). Sabiendo esto, vea si el mensaje de error tiene algún sentido.
No puede ordenar una matriz de matrices utilizando la función incorporada de ordenación. Puede recorrer la matriz de cadenas y ordenar cada cadena (str) usando sort(str.begin(), str.end()).