Функция stable_partition
Функция stable_partition переупорядочивает элементы последовательности таким образом, чтобы все элементы, для которых предикат возвращает true, оказались в начале, а все элементы, для которых предикат возвращает false - в конце. Главная особенность этой функции заключается в том, что она сохраняет относительный порядок элементов внутри каждой из групп. В первый параметр мы передаем итератор начала диапазона, во второй - итератор конца диапазона, а в третий - унарный предикат, задающий условие разделения.
Синтаксис
template <class BidirIt, class UnaryPredicate>
BidirIt stable_partition(BidirIt first, BidirIt last, UnaryPredicate p);
Пример
Давайте разделим вектор так, чтобы все четные числа шли в начале, а нечетные - в конце, сохраняя исходный порядок чисел:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
stable_partition(v.begin(), v.end(), [](int n) {
return n % 2 == 0;
});
for (int n : v)
{
cout << n << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
2 4 1 3 5
Пример
Давайте разделим вектор строк так, чтобы строки, начинающиеся с символа 'a', шли в начале, а остальные - в конце. Обратите внимание, что порядок строк внутри каждой группы сохраняется:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
vector<string> v = {"abcde", "12345", "apple", "banana", "avocado"};
stable_partition(v.begin(), v.end(), [](const string& s) {
return s[0] == 'a';
});
for (const string& s : v)
{
cout << s << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
"abcde apple avocado 12345 banana"
Смотрите также
-
функция
partition,
которая разделяет диапазон, но не сохраняет порядок элементов -
функция
is_partitioned,
которая проверяет, разделен ли диапазон -
функция
stable_sort,
которая устойчиво сортирует диапазон -
функция
sort,
которая сортирует диапазон