std : sort를 사용하여 cpp에서 문자열 배열 정렬
Sep 27 2020
나는 이것 과 같은 사이트의 몇 가지 제안에 따라 문자열 배열 (예, 벡터가 아님)을 정렬하려고합니다 . 이것은 내가 지금까지 작성한 코드이지만 항상 이 긴 오류를 인쇄합니다 (Google에 결과가 없음). 이 문제를 어떻게 해결할 수 있습니까?
#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';
}
답변
1 eerorika Sep 27 2020 at 17:18
다음은 오류 메시지의 관련 부분입니다.
오류 : 배열은 중괄호로 묶인 이니셜 라이저로 초기화해야합니다.
불행히도 명확하지 않지만 정렬 구현 내에서 비롯됩니다. 따라서 알고리즘의 전제 조건을 수정하겠습니다.
std::sort요소를 교체하여 구현됩니다. 따라서 요소를 교체 할 수 있어야합니다. 배열의 요소는 배열입니다. 어레이는 스왑 할 수 없습니다. 따라서 배열 배열은 정렬 할 수 없습니다.
여기서 "문자열"유형을 사용합니까?
사용 std::string하면 작동합니다. 교환 가능합니다. 심지어 비교할 수 있기 때문에 사용자 지정 비교 함수도 필요하지 않습니다.
어레이를 스왑 불가능하고 다른 유형을 스왑 가능하게 만드는 이유
스왑은 이동 초기화 (및 할당)에 의해 보충됩니다. 언어 규칙은 배열이 초기화 가능하지 않거나 할당 가능하지 않다고 말합니다. 이것을 알고 오류 메시지가 의미가 있는지 확인하십시오.
PavanKumarR Jan 07 2021 at 18:46
sort inbuilt 함수를 사용하여 배열 배열을 정렬 할 수 없습니다. 를 사용하여 문자열 배열을 탐색하고 각 문자열 (str)을 정렬 할 수 있습니다 sort(str.begin(), str.end()).