Di 'che ho un vettore di numeri interi:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Quindi lo ordino in ordine 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]);
Questo produce quanto segue:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Ora voglio avere i numeri 3, 4, 5 e 6 da spostare fino alla fine e mantenere l'ordine discendente per loro (preferibilmente senza doverlo usare sort
per la seconda volta). Cioè, ecco quello che voglio:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
Come devo modificare la funzione di confronto di std::sort
per ottenere ciò?
std::greater
dal <functional>
può essere usato al posto del tuo lambda. Per quanto riguarda la tua domanda, scrivere un comparatore più dettagliato che assicuri che i tuoi valori vengano confrontati nel modo desiderato potrebbe essere il modo più semplice per farlo.
return first > second
.
return indices[first] > indices[second]
Non intendireturn first < second;
?