Скажіть, у мене є вектор цілих чисел:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
Потім я сортую це у порядку зменшення:
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]);
Це призводить до наступного:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Тепер я хочу, щоб цифри 3, 4, 5 і 6 були переміщені до кінця, і дотримуватись порядку їх спадання (бажано, не використовуючи sort
вдруге). Тобто ось чого я хочу:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
Як я можу змінити функцію порівняння std::sort
для досягнення цього?
std::greater
з <functional>
можна використовувати замість вашого лямбда. Що стосується вашого запитання, написання більш детального порівняння, який забезпечує ваші значення порівняння так, як ви хочете, може бути найпростішим способом зробити це.
return first > second
.
return indices[first] > indices[second]
Ви не маєте на увазіreturn first < second;
?