ว่าฉันมีเวกเตอร์จำนวนเต็ม:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
จากนั้นฉันเรียงตามลำดับจากมากไปน้อย:
sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];})
for (int i=0; i<15; i++) printf("%i\n", indices[i]);
สิ่งนี้สร้างสิ่งต่อไปนี้:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ตอนนี้ฉันต้องการให้หมายเลข 3, 4, 5 และ 6 ถูกย้ายไปยังจุดสิ้นสุดและเก็บลำดับจากมากไปน้อยสำหรับพวกเขา (โดยไม่ต้องใช้sort
เป็นครั้งที่สอง) คือนี่คือสิ่งที่ฉันต้องการ:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
ฉันจะปรับเปลี่ยนฟังก์ชันการเปรียบเทียบของstd::sort
เพื่อให้บรรลุได้อย่างไร
std::greater
จาก<functional>
สามารถใช้แทนแลมบ์ดาของคุณได้ สำหรับคำถามของคุณการเขียนตัวเปรียบเทียบแบบละเอียดมากขึ้นเพื่อให้แน่ใจว่าค่าของคุณเปรียบเทียบกับวิธีที่คุณต้องการอาจเป็นวิธีที่ง่ายที่สุดในการทำ
return first > second
ในลำดับถัดลงมามันควรจะเป็น
return indices[first] > indices[second]
คุณไม่หมายถึงreturn first < second;
เหรอ