Diyelim ki bir tamsayı vektörüm var:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Sonra azalan sırada sıralıyorum:
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]);
Bu aşağıdakileri üretir:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Şimdi 3, 4, 5 ve 6 sayılarının sonuna kadar taşınmasını ve onlar için azalan düzeni korumasını istiyorum (tercihen sort
ikinci kez kullanmak zorunda kalmadan ). Yani, işte istediğim şey:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
Bunun için karşılaştırma işlevini nasıl değiştirmeliyim std::sort
?
std::greater
gelen <functional>
senin lambda yerine kullanılabilir. Sorunuza gelince, değerlerinizin istediğiniz şekilde karşılaştırılmasını sağlayan daha ayrıntılı bir karşılaştırıcı yazmak, bunu yapmanın en kolay yolu olabilir.
return first > second
.
return indices[first] > indices[second]
Bunu mu demek istedinizreturn first < second;
?