Tri du tableau de chaînes dans cpp en utilisant std: sort

Sep 27 2020

J'essaie de trier des tableaux (oui, pas des vecteurs) de chaînes, en suivant quelques suggestions de sites tels que celui- ci. C'est le code que j'ai écrit jusqu'à présent, mais il imprime toujours cette longue erreur (qui n'a pas de résultats sur google). Comment cela peut-il être résolu?

#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';
}

Réponses

1 eerorika Sep 27 2020 at 17:18

Voici la partie pertinente du message d'erreur:

erreur: le tableau doit être initialisé avec un initialiseur entre accolades

Ce qui n'est malheureusement pas très clair, mais vient de l'intérieur de l'implémentation du tri. Révisons donc les conditions préalables de l'algorithme:

std::sortest implémenté en échangeant des éléments. En tant que tel, il nécessite que les éléments soient interchangeables. Les éléments de votre tableau sont des tableaux. Les tableaux ne sont pas permutables. Par conséquent, un tableau de tableaux n'est pas triable.

l'utilisation du type "chaîne" fonctionnera-t-elle ici?

L'utilisation std::stringfonctionnera. Il est échangeable. Vous n'aurez même pas besoin d'une fonction de comparaison personnalisée car elle est même comparable.

ce qui rend les tableaux non échangeables et les autres types échangeables

Le swap est implémenté par l'initialisation (et l'affectation) du mouvement. Les règles de langage indiquent que le tableau ne peut pas être initialisé par déplacement (ni assignable). Sachant cela, voyez si le message d'erreur a du sens.

PavanKumarR Jan 07 2021 at 18:46

Vous ne pouvez pas trier un tableau de tableaux à l'aide de la fonction intégrée de tri. Vous pouvez parcourir le tableau de chaînes et trier chaque chaîne (str) à l'aide de sort(str.begin(), str.end()).