◆ upper_bound() [5/8]

template<typename DerivedPolicy , typename ForwardIterator , typename InputIterator , typename OutputIterator >
__host__ __device__ OutputIterator thrust::upper_bound ( const thrust::detail::execution_policy_base< DerivedPolicy > &  exec,
ForwardIterator  first,
ForwardIterator  last,
InputIterator  values_first,
InputIterator  values_last,
OutputIterator  result 

upper_bound is a vectorized version of binary search: for each iterator v in [values_first, values_last) it attempts to find the value *v in an ordered range [first, last). Specifically, it returns the index of last position where value could be inserted without violating the ordering.

The algorithm's execution is parallelized as determined by exec.

execThe execution policy to use for parallelization.
firstThe beginning of the ordered sequence.
lastThe end of the ordered sequence.
values_firstThe beginning of the search values sequence.
values_lastThe end of the search values sequence.
resultThe beginning of the output sequence.
Template Parameters
DerivedPolicyThe name of the derived execution policy.
ForwardIteratoris a model of Forward Iterator.
InputIteratoris a model of Input Iterator. and InputIterator's value_type is LessThanComparable.
OutputIteratoris a model of Output Iterator. and ForwardIterator's difference_type is convertible to OutputIterator's value_type.
The ranges [first,last) and [result, result + (last - first)) shall not overlap.

The following code snippet demonstrates how to use upper_bound to search for multiple values in a ordered range using the thrust::device execution policy for parallelization:

thrust::device_vector<int> input(5);
input[0] = 0;
input[1] = 2;
input[2] = 5;
input[3] = 7;
input[4] = 8;
values[0] = 0;
values[1] = 1;
values[2] = 2;
values[3] = 3;
values[4] = 8;
values[5] = 9;
input.begin(), input.end(),
values.begin(), values.end(),
// output is now [1, 1, 2, 2, 5, 5]
See also