thrust::equal_range
Defined in thrust/binary_search.h
-
template<typename DerivedPolicy, typename ForwardIterator, typename T, typename StrictWeakOrdering>
thrust::pair<ForwardIterator, ForwardIterator> thrust::equal_range(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, ForwardIterator first, ForwardIterator last, const T &value, StrictWeakOrdering comp) equal_range
is a version of binary search: it attempts to find the element value in an ordered range[first, last)
. The value returned byequal_range
is essentially a combination of the values returned bylower_bound
andupper_bound:
it returns apair
of iteratorsi
andj
such thati
is the first position where value could be inserted without violating the ordering andj
is the last position where value could be inserted without violating the ordering. It follows that every element in the range[i, j)
is equivalent to value, and that[i, j)
is the largest subrange of[first, last)
that has this property.This version of
equal_range
returns apair
of iterators[i, j)
.i
is the furthermost iterator in[first, last)
such that, for every iteratork
in[first, i)
,comp(*k, value)
istrue
.j
is the furthermost iterator in[first, last)
such that, for every iteratork
in[first, last)
,comp(value, *k)
isfalse
. For every iteratork
in[i, j)
, neithercomp(value, *k)
norcomp(*k, value)
istrue
.The algorithm’s execution is parallelized as determined by
exec
.The following code snippet demonstrates how to use
equal_range
to search for values in a ordered range using thethrust::device
execution policy for parallelization:#include <thrust/binary_search.h> #include <thrust/device_vector.h> #include <thrust/functional.h> #include <thrust/execution_policy.h> ... thrust::device_vector<int> input(5); input[0] = 0; input[1] = 2; input[2] = 5; input[3] = 7; input[4] = 8; thrust::equal_range(thrust::device, input.begin(), input.end(), 0, thrust::less<int>()); // returns [input.begin(), input.begin() + 1) thrust::equal_range(thrust::device, input.begin(), input.end(), 1, thrust::less<int>()); // returns [input.begin() + 1, input.begin() + 1) thrust::equal_range(thrust::device, input.begin(), input.end(), 2, thrust::less<int>()); // returns [input.begin() + 1, input.begin() + 2) thrust::equal_range(thrust::device, input.begin(), input.end(), 3, thrust::less<int>()); // returns [input.begin() + 2, input.begin() + 2) thrust::equal_range(thrust::device, input.begin(), input.end(), 8, thrust::less<int>()); // returns [input.begin() + 4, input.end()) thrust::equal_range(thrust::device, input.begin(), input.end(), 9, thrust::less<int>()); // returns [input.end(), input.end())
See also
lower_bound
See also
upper_bound
See also
Binary Search
- Parameters
exec – The execution policy to use for parallelization.
first – The beginning of the ordered sequence.
last – The end of the ordered sequence.
value – The value to be searched.
comp – The comparison operator.
- Template Parameters
DerivedPolicy – The name of the derived execution policy.
ForwardIterator – is a model of Forward Iterator.
T – is comparable to
ForwardIterator's
value_type
.StrictWeakOrdering – is a model of Strict Weak Ordering.
- Returns
A
pair
of iterators[i, j)
that define the range of equivalent elements.