thrust::stable_partition
Defined in thrust/partition.h
- 
template<typename DerivedPolicy, typename ForwardIterator, typename InputIterator, typename Predicate>
 ForwardIterator thrust::stable_partition(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, ForwardIterator first, ForwardIterator last, InputIterator stencil, Predicate pred)
- stable_partitionis much like- partition:it reorders the elements in the range- [first, last)based on the function object- predapplied to a stencil range- [stencil, stencil + (last - first)), such that all of the elements whose corresponding stencil element satisfies- predprecede all of the elements whose corresponding stencil element fails to satisfy it. The postcondition is that, for some iterator- middlein the range- [first, last),- pred(*stencil_i)is- truefor every iterator- stencil_iin the range- [stencil,stencil + (middle - first))and- falsefor every iterator- stencil_iin the range- [stencil + (middle - first), stencil + (last - first)). The return value of- stable_partitionis- middle.- stable_partitiondiffers from- partitionin that- stable_partitionis guaranteed to preserve relative order. That is, if- xand- yare elements in- [first, last), such that- pred(x) == pred(y), and if- xprecedes- y, then it will still be true after- stable_partitionthat- xprecedes- y.- The algorithm’s execution is parallelized as determined by - exec.- The following code snippet demonstrates how to use - stable_partitionto reorder a sequence so that even numbers precede odd numbers using the- thrust::hostexecution policy for parallelization:- #include <thrust/partition.h> #include <thrust/execution_policy.h> ... struct is_even { __host__ __device__ bool operator()(const int &x) { return (x % 2) == 0; } }; ... int A[] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1}; int S[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; const int N = sizeof(A)/sizeof(int); thrust::stable_partition(thrust::host, A, A + N, S, is_even()); // A is now {1, 1, 1, 1, 1, 0, 0, 0, 0, 0} // S is unmodified - See also - partition- See also - stable_partition_copy- Parameters
- exec – The execution policy to use for parallelization. 
- first – The first element of the sequence to reorder. 
- last – One position past the last element of the sequence to reorder. 
- stencil – The beginning of the stencil sequence. 
- pred – A function object which decides to which partition each element of the sequence - [first, last)belongs.
 
- Template Parameters
- DerivedPolicy – The name of the derived execution policy. 
- ForwardIterator – is a model of Forward Iterator, and - ForwardIteratoris mutable.
- InputIterator – is a model of Input Iterator, and - InputIterator's- value_typeis convertible to- Predicate'sargument type.
- Predicate – is a model of Predicate. 
 
- Returns
- An iterator referring to the first element of the second partition, that is, the sequence of the elements whose stencil elements do not satisfy - pred.
- Pre
- The range - [first, last)shall not overlap with the range- [stencil, stencil + (last - first)).