Angenommen, ich habe einen Vektor von ganzen Zahlen:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Dann sortiere ich es in absteigender Reihenfolge:
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]);
Dies ergibt Folgendes:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Jetzt möchte ich, dass die Zahlen 3, 4, 5 und 6 an das Ende verschoben werden und die absteigende Reihenfolge für sie beibehalten wird (vorzugsweise ohne sie zum sort
zweiten Mal verwenden zu müssen). Dh hier ist was ich will:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
Wie soll ich die Vergleichsfunktion des ändern std::sort
, um dies zu erreichen?
std::greater
aus <functional>
kann anstelle des Lambda verwendet werden. In Bezug auf Ihre Frage ist es möglicherweise am einfachsten, einen ausführlicheren Vergleicher zu schreiben, der sicherstellt, dass Ihre Werte so vergleichen, wie Sie es möchten.
return first > second
.
return indices[first] > indices[second]
Meinst du nichtreturn first < second;
?