How do I partition and stable_partition sequences in C++?

Partition and Stable Partition in C++

In C++, the std::partition and std::stable_partition algorithms are used to rearrange the elements of a sequence based on a predicate. The key difference between them is that while std::partition does not maintain the original order of equal elements, std::stable_partition does.

Using std::partition

std::partition rearranges the elements in such a way that all the elements for which the predicate returns true appear before the elements for which it returns false. However, it may not preserve the relative order of the equal elements.

Using std::stable_partition

std::stable_partition performs a similar task, but maintains the relative order of the equal elements. This is particularly useful when the order of elements matters.

Example

#include <iostream> #include <vector> #include <algorithm> bool isEven(int x) { return x % 2 == 0; } int main() { std::vector numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Using std::partition std::partition(numbers.begin(), numbers.end(), isEven); std::cout << "Partitioned (not stable): "; for (int num : numbers) { std::cout << num << " "; } std::cout << std::endl; // Reset vector numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Using std::stable_partition std::stable_partition(numbers.begin(), numbers.end(), isEven); std::cout << "Stable Partitioned: "; for (int num : numbers) { std::cout << num << " "; } std::cout << std::endl; return 0; }

C++ partition stable_partition algorithms vectors sorting programming