Digamos que eu tenha um vetor de números inteiros:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Então eu classifico em ordem decrescente:
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]);
Isso produz o seguinte:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Agora, quero que os números 3, 4, 5 e 6 sejam movidos para o final e mantenha a ordem decrescente para eles (de preferência sem precisar usar sort
pela segunda vez). Ou seja, aqui está o que eu quero:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
Como devo modificar a função de comparação do std::sort
para conseguir isso?
std::greater
from <functional>
pode ser usado no lugar de sua lambda. Quanto à sua pergunta, escrever um comparador mais detalhado que garanta que seus valores sejam comparados da maneira que você deseja pode ser a maneira mais fácil de fazê-lo.
return first > second
.
return indices[first] > indices[second]
Você não quer dizerreturn first < second;
?