Menyortir array string di cpp menggunakan std: sort

Sep 27 2020

Saya mencoba mengurutkan array (ya, bukan vektor) string, mengikuti beberapa saran dari situs seperti ini . Ini adalah kode yang saya tulis sejauh ini, tetapi selalu mencetak kesalahan panjang ini (yang tidak memiliki hasil di google). Bagaimana ini bisa diperbaiki?

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

Jawaban

1 eerorika Sep 27 2020 at 17:18

Ini adalah bagian yang relevan dari pesan kesalahan:

error: array harus diinisialisasi dengan penginisialisasi yang diapit oleh kurung kurawal

Sayangnya yang tidak terlalu jelas, tetapi berasal dari dalam implementasi pemilahan. Jadi, mari kita merevisi prasyarat algoritme:

std::sortdiimplementasikan dengan menukar elemen. Karena itu, diperlukan elemen yang dapat ditukar. Elemen dari array Anda adalah array. Array tidak bisa ditukar. Oleh karena itu, array array tidak dapat diurutkan.

akankah menggunakan tipe "string" berfungsi di sini?

Menggunakan std::stringakan berhasil. Ini bisa ditukar. Anda bahkan tidak memerlukan fungsi perbandingan khusus karena ini bahkan dapat dibandingkan.

apa yang membuat array tidak bisa ditukar dan tipe lainnya bisa ditukar

Swap dijalankan dengan inisialisasi langkah (dan penugasan). Aturan bahasa mengatakan bahwa array tidak dapat dipindahkan secara inisialisasi (juga tidak dapat dialihkan). Mengetahui hal ini, lihat apakah kesalahan kesalahan masuk akal.

PavanKumarR Jan 07 2021 at 18:46

Anda tidak dapat mengurutkan array menggunakan fungsi sortir bawaan. Anda dapat melintasi larik string dan mengurutkan setiap string (str) menggunakan sort(str.begin(), str.end()).