Tri du tableau de chaînes dans cpp en utilisant std: sort
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
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.
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()).