การเรียงลำดับอาร์เรย์ของสตริงใน cpp โดยใช้ std: sort

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

นี่คือส่วนที่เกี่ยวข้องของข้อความแสดงข้อผิดพลาด:

ข้อผิดพลาด: อาร์เรย์ต้องเริ่มต้นด้วยตัวเริ่มต้นที่มีวงเล็บปีกกา

ซึ่งไม่ชัดเจนน่าเสียดาย แต่ ot มาจากภายในการดำเนินการเรียงลำดับ ดังนั้นให้เราแก้ไขเงื่อนไขเบื้องต้นของอัลกอริทึม:

std::sortดำเนินการโดยการแลกเปลี่ยนองค์ประกอบ ดังนั้นจึงต้องใช้องค์ประกอบที่ถอดเปลี่ยนได้ องค์ประกอบของอาร์เรย์ของคุณคืออาร์เรย์ อาร์เรย์ไม่สามารถถอดเปลี่ยนได้ ดังนั้นอาร์เรย์ของอาร์เรย์จึงไม่สามารถจัดเรียงได้

การใช้ประเภท "string" จะใช้ได้หรือไม่

การใช้std::stringจะทำงาน เป็นแบบถอดเปลี่ยนได้ คุณไม่จำเป็นต้องใช้ฟังก์ชันการเปรียบเทียบแบบกำหนดเองเนื่องจากสามารถเทียบเคียงได้

สิ่งที่ทำให้อาร์เรย์ไม่สามารถเปลี่ยนได้และประเภทอื่น ๆ ที่ถอดเปลี่ยนได้

Swap ถูกใช้งานโดยการเริ่มต้นการย้าย (และการมอบหมาย) กฎของภาษาบอกว่าอาร์เรย์ไม่สามารถเริ่มต้นได้ (และไม่สามารถกำหนดได้) เมื่อทราบสิ่งนี้แล้วให้ดูว่าข้อผิดพลาดที่เกิดขึ้นนั้นสมเหตุสมผลหรือไม่

PavanKumarR Jan 07 2021 at 18:46

คุณไม่สามารถจัดเรียงอาร์เรย์ของอาร์เรย์โดยใช้ฟังก์ชัน sort inbuilt คุณสามารถเดินทางโดยทางอาร์เรย์ของสตริงและเรียงลำดับแต่ละสาย (STR) sort(str.begin(), str.end())โดยใช้