Ordenar matriz de cadenas en cpp usando std: sort

Sep 27 2020

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

1 eerorika Sep 27 2020 at 17:18

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.

PavanKumarR Jan 07 2021 at 18:46

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()).