Katakanlah saya memiliki vektor bilangan bulat:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Lalu saya mengurutkannya dalam urutan menurun:
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]);
Ini menghasilkan yang berikut:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Sekarang saya ingin memiliki angka 3, 4, 5, dan 6 untuk dipindahkan ke akhir, dan menjaga urutan turun untuk mereka (lebih disukai tanpa harus menggunakan sort
untuk yang kedua kalinya). Yaitu, inilah yang saya inginkan:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
Bagaimana saya harus memodifikasi fungsi perbandingan std::sort
untuk mencapai itu?
std::greater
dari <functional>
dapat digunakan sebagai pengganti lambda Anda. Mengenai pertanyaan Anda, menulis komparator yang lebih verbose yang memastikan nilai Anda membandingkan dengan cara yang Anda inginkan mungkin merupakan cara termudah untuk melakukannya.
return first > second
.
return indices[first] > indices[second]
Bukankah maksud Andareturn first < second;
?