Powiedzmy, że mam wektor liczb całkowitych:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Następnie sortuję je w kolejności malejącej:
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]);
To powoduje:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Teraz chcę, aby cyfry 3, 4, 5 i 6 zostały przesunięte na koniec, i zachowaj dla nich malejącą kolejność (najlepiej bez konieczności używania sort
po raz drugi). To znaczy, czego chcę:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
Jak zmodyfikować funkcję porównawczą, std::sort
aby to osiągnąć?
std::greater
ze <functional>
mogą być stosowane w miejsce swojego lambda. Jeśli chodzi o twoje pytanie, najłatwiejszym sposobem może być napisanie bardziej szczegółowego komparatora, który zapewni, że twoje wartości porównają się tak, jak chcesz.
return first > second
.
return indices[first] > indices[second]
Nie masz na myślireturn first < second;
?