Nói rằng tôi có một vectơ số nguyên:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Sau đó, tôi sắp xếp nó theo thứ tự giảm dần:
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]);
Điều này tạo ra như sau:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Bây giờ tôi muốn có các số 3, 4, 5 và 6 được di chuyển đến cuối và giữ thứ tự giảm dần cho chúng (tốt nhất là không phải sử dụng sort
lần thứ hai). Tức là đây là những gì tôi muốn:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
Làm thế nào tôi nên sửa đổi chức năng so sánh của std::sort
để đạt được điều đó?
std::greater
từ <functional>
có thể được sử dụng thay cho lambda của bạn. Đối với câu hỏi của bạn, viết một bộ so sánh dài hơn để đảm bảo các giá trị của bạn so sánh theo cách bạn muốn có thể là cách dễ nhất để làm điều đó.
return first > second
.
return indices[first] > indices[second]
Ý bạn làreturn first < second;
sao?