Sortieren eines Arrays von Zeichenfolgen in cpp mit std: sort
Ich versuche, Arrays (ja, keine Vektoren) von Strings zu sortieren, indem ich einigen Vorschlägen von Sites wie dieser folge. Dies ist der Code, den ich bisher geschrieben habe, aber er druckt immer diesen langen Fehler aus (der bei Google keine Ergebnisse hat). Wie kann das behoben werden?
#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';
}
Antworten
Dies ist der relevante Teil der Fehlermeldung:
Fehler: Das Array muss mit einem in Klammern eingeschlossenen Initialisierer initialisiert werden
Was leider nicht sehr klar ist, aber nicht aus der Sortierimplementierung stammt. Lassen Sie uns also die Voraussetzungen des Algorithmus überarbeiten:
std::sortwird durch Austausch von Elementen implementiert. Daher müssen die Elemente austauschbar sein. Die Elemente Ihres Arrays sind Arrays. Arrays können nicht ausgetauscht werden. Daher ist ein Array von Arrays nicht sortierbar.
funktioniert die Verwendung des Typs "string" hier?
Verwenden std::stringwird funktionieren. Es ist austauschbar. Sie benötigen nicht einmal eine benutzerdefinierte Vergleichsfunktion, da diese sogar vergleichbar ist.
Was macht Arrays nicht austauschbar und andere Typen austauschbar
Der Swap wird durch Verschiebungsinitialisierung (und Zuweisung) implementiert. Sprachregeln besagen, dass das Array weder initialisierbar noch zuweisbar ist. Wenn Sie dies wissen, prüfen Sie, ob die Fehlermeldung sinnvoll ist.
Sie können Arrays von Arrays nicht mit der integrierten Funktion sortieren sortieren. Sie können das Array von Zeichenfolgen durchlaufen und jede Zeichenfolge (str) mit sortieren sort(str.begin(), str.end()).