Std: sort kullanarak cpp'de dizge dizilerini sıralama

Sep 27 2020

Ben gibi sitelerden bazı öneriler aşağıda, dizeleri (değil vektörler, evet) diziler sıralamak için çalışıyorum bu biri. Şimdiye kadar yazdığım kod bu, ancak her zaman bu uzun hatayı (google'da hiçbir sonucu olmayan) yazdırıyor . Bu nasıl düzeltilebilir?

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

Yanıtlar

1 eerorika Sep 27 2020 at 17:18

Bu, hata mesajının ilgili kısmıdır:

hata: dizi, küme ayracı içeren bir başlatıcı ile başlatılmalıdır

Bu maalesef çok açık değil, ancak sıralama uygulaması içinden geliyor. Öyleyse, algoritmanın ön koşullarını gözden geçirelim:

std::sortöğeleri değiş tokuş ederek gerçekleştirilir. Bu nedenle, öğelerin değiştirilebilir olmasını gerektirir. Dizinizin elemanları dizilerdir. Diziler değiştirilemez. Bu nedenle bir dizi dizisi sıralanamaz.

"string" türünü kullanmak burada işe yarar mı?

Kullanmak std::stringişe yarayacak. Değiştirilebilir. Hatta karşılaştırılabilir olduğu için özel bir karşılaştırma işlevine bile ihtiyacınız olmayacak.

dizileri değiştirilemez ve diğer türleri değiştirilemez yapan şey

Takas, hareket başlatma (ve atama) ile gerçekleştirilir. Dil kuralları, dizinin hareket ettirilebilir olmadığını (ve atanamayacağını) söyler. Bunu bilerek, hata mesajının mantıklı olup olmadığına bakın.

PavanKumarR Jan 07 2021 at 18:46

Dahili sıralama işlevini kullanarak dizi dizilerini sıralayamazsınız. Dizeler dizisi boyunca gezinebilir ve her dizeyi (dizeyi) kullanarak sıralayabilirsiniz sort(str.begin(), str.end()).