Disons que j'ai un vecteur d'entiers:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Ensuite, je le trie par ordre décroissant:
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]);
Cela produit les éléments suivants:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Maintenant, je veux que les chiffres 3, 4, 5 et 6 soient déplacés à la fin et garder l'ordre décroissant pour eux (de préférence sans avoir à utiliser sort
pour la deuxième fois). C'est à dire, voici ce que je veux:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
Comment dois-je modifier la fonction de comparaison du std::sort
pour y parvenir?
std::greater
de <functional>
peut être utilisé à la place de votre lambda. En ce qui concerne votre question, l'écriture d'un comparateur plus détaillé qui garantit que vos valeurs comparent la façon dont vous le souhaitez pourrait être la façon la plus simple de le faire.
return first > second
.
return indices[first] > indices[second]
Tu ne veux pas direreturn first < second;
?