Sortowanie tablicy ciągów w cpp przy użyciu std: sort
Próbuję posortować tablice (tak, nie wektory) ciągów, kierując się kilkoma sugestiami z witryn takich jak ta . To jest kod, który napisałem do tej pory, ale zawsze wypisuje ten długi błąd (który nie ma wyników w google). Jak to może zostać naprawione?
#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';
}
Odpowiedzi
Oto odpowiednia część komunikatu o błędzie:
błąd: tablica musi być zainicjowana za pomocą inicjatora w nawiasach
Co niestety nie jest zbyt jasne, ale ot pochodzi z implementacji sortowania. Zrewidujmy więc warunki wstępne algorytmu:
std::sortjest realizowane poprzez zamianę elementów. W związku z tym wymaga, aby elementy były wymienne. Elementy twojej tablicy to tablice. Tablice nie są wymienialne. Dlatego tablicy tablic nie można sortować.
czy użycie typu „string” będzie tutaj działać?
Używanie std::stringbędzie działać. Jest wymienny. Nie będziesz nawet potrzebować niestandardowej funkcji porównania, ponieważ jest nawet porównywalna.
co sprawia, że tablice są niewymienialne, a inne typy są wymienne
Zamiana jest uzupełniana przez inicjalizację przeniesienia (i przypisanie). Reguły językowe mówią, że tablica nie jest przenoszona, inicjowalna (ani nie można jej przypisać). Wiedząc o tym, sprawdź, czy komunikat błędu ma jakiś sens.
Nie można sortować tablicy tablic przy użyciu wbudowanej funkcji sort. Możesz przechodzić przez tablicę ciągów i sortować każdy ciąg (ciąg) za pomocą sort(str.begin(), str.end()).