Digamos que tengo un vector de enteros:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Luego lo ordeno en orden descendente:
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]);
Esto produce lo siguiente:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Ahora quiero que los números 3, 4, 5 y 6 se muevan hasta el final, y mantener el orden descendente para ellos (preferiblemente sin tener que usarlos sort
por segunda vez). Es decir, esto es lo que quiero:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
¿Cómo debo modificar la función de comparación de std::sort
para lograr eso?
std::greater
desde <functional>
se puede usar en lugar de su lambda. En cuanto a su pregunta, escribir un comparador más detallado que garantice que sus valores se comparen de la manera deseada puede ser la forma más fácil de hacerlo.
return first > second
.
return indices[first] > indices[second]
No quiere decirreturn first < second;
?