template<typename DerivedPolicy , typename ForwardIterator , typename InputIterator , typename OutputIterator , typename StrictWeakOrdering >
__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, |
|
|
StrictWeakOrdering |
comp |
|
) |
| |
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 first position where value could be inserted without violating the ordering. This version of upper_bound
uses function object comp
for comparison.
The algorithm's execution is parallelized as determined by exec
.
- Parameters
-
exec | The execution policy to use for parallelization. |
first | The beginning of the ordered sequence. |
last | The end of the ordered sequence. |
values_first | The beginning of the search values sequence. |
values_last | The end of the search values sequence. |
result | The beginning of the output sequence. |
comp | The comparison operator. |
- Template Parameters
-
DerivedPolicy | The name of the derived execution policy. |
ForwardIterator | is a model of Forward Iterator. |
InputIterator | is a model of Input Iterator. and InputIterator's value_type is comparable to ForwardIterator's value_type . |
OutputIterator | is a model of Output Iterator. and ForwardIterator's difference_type is convertible to OutputIterator's value_type . |
StrictWeakOrdering | is a model of Strict Weak Ordering. |
- Precondition
- 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.begin(),
- See also
- https://en.cppreference.com/w/cpp/algorithm/upper_bound
-
lower_bound
-
equal_range
-
binary_search