thrust::partition
Defined in thrust/partition.h
-
template<typename DerivedPolicy, typename ForwardIterator, typename InputIterator, typename Predicate>
ForwardIterator thrust::partition(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, ForwardIterator first, ForwardIterator last, InputIterator stencil, Predicate pred) partition
reorders the elements[first, last)
based on the function objectpred
applied to a stencil range[stencil, stencil + (last - first))
, such that all of the elements whose corresponding stencil element satisfiespred
precede all of the elements whose corresponding stencil element fails to satisfy it. The postcondition is that, for some iteratormiddle
in the range[first, last)
,pred(*stencil_i)
istrue
for every iteratorstencil_i
in the range[stencil,stencil + (middle - first))
andfalse
for every iteratorstencil_i
in the range[stencil + (middle - first), stencil + (last - first))
. The return value ofstable_partition
ismiddle
.Note that the relative order of elements in the two reordered sequences is not necessarily the same as it was in the original sequence. A different algorithm,
stable_partition
, does guarantee to preserve the relative order.The algorithm’s execution is parallelized as determined by
exec
.The following code snippet demonstrates how to use
partition
to reorder a sequence so that even numbers precede odd numbers using thethrust::host
execution 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::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
stable_partition
See also
partition_copy
- Parameters
exec – The execution policy to use for parallelization.
first – The beginning of the sequence to reorder.
last – The end 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
ForwardIterator
is mutable.InputIterator – is a model of Input Iterator, and
InputIterator's
value_type
is convertible toPredicate's
argument_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 ranges
[first,last)
and[stencil, stencil + (last - first))
shall not overlap.