การเรียงลำดับอาร์เรย์ของสตริงใน cpp โดยใช้ std: sort
ฉันพยายามที่จะเรียงลำดับอาร์เรย์ (ใช่ไม่เวกเตอร์) ของสตริง, ทำตามคำแนะนำจากเว็บไซต์เช่นนี้อย่างใดอย่างหนึ่ง นี่คือรหัสที่ฉันเขียนจนถึงตอนนี้ แต่มักจะพิมพ์ข้อผิดพลาดยาว ๆนี้ออกมา (ซึ่งไม่มีผลลัพธ์ใน 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';
}
คำตอบ
นี่คือส่วนที่เกี่ยวข้องของข้อความแสดงข้อผิดพลาด:
ข้อผิดพลาด: อาร์เรย์ต้องเริ่มต้นด้วยตัวเริ่มต้นที่มีวงเล็บปีกกา
ซึ่งไม่ชัดเจนน่าเสียดาย แต่ ot มาจากภายในการดำเนินการเรียงลำดับ ดังนั้นให้เราแก้ไขเงื่อนไขเบื้องต้นของอัลกอริทึม:
std::sortดำเนินการโดยการแลกเปลี่ยนองค์ประกอบ ดังนั้นจึงต้องใช้องค์ประกอบที่ถอดเปลี่ยนได้ องค์ประกอบของอาร์เรย์ของคุณคืออาร์เรย์ อาร์เรย์ไม่สามารถถอดเปลี่ยนได้ ดังนั้นอาร์เรย์ของอาร์เรย์จึงไม่สามารถจัดเรียงได้
การใช้ประเภท "string" จะใช้ได้หรือไม่
การใช้std::stringจะทำงาน เป็นแบบถอดเปลี่ยนได้ คุณไม่จำเป็นต้องใช้ฟังก์ชันการเปรียบเทียบแบบกำหนดเองเนื่องจากสามารถเทียบเคียงได้
สิ่งที่ทำให้อาร์เรย์ไม่สามารถเปลี่ยนได้และประเภทอื่น ๆ ที่ถอดเปลี่ยนได้
Swap ถูกใช้งานโดยการเริ่มต้นการย้าย (และการมอบหมาย) กฎของภาษาบอกว่าอาร์เรย์ไม่สามารถเริ่มต้นได้ (และไม่สามารถกำหนดได้) เมื่อทราบสิ่งนี้แล้วให้ดูว่าข้อผิดพลาดที่เกิดขึ้นนั้นสมเหตุสมผลหรือไม่
คุณไม่สามารถจัดเรียงอาร์เรย์ของอาร์เรย์โดยใช้ฟังก์ชัน sort inbuilt คุณสามารถเดินทางโดยทางอาร์เรย์ของสตริงและเรียงลำดับแต่ละสาย (STR) sort(str.begin(), str.end())โดยใช้