thrust

◆ minmax_element() [4/4]

template<typename ForwardIterator , typename BinaryPredicate >
thrust::pair<ForwardIterator,ForwardIterator> thrust::minmax_element ( ForwardIterator  first,
ForwardIterator  last,
BinaryPredicate  comp 
)

minmax_element finds the smallest and largest elements in the range [first, last). It returns a pair of iterators (imin, imax) where imin is the same iterator returned by min_element and imax is the same iterator returned by max_element. This function is potentially more efficient than separate calls to min_element and max_element.

Parameters
firstThe beginning of the sequence.
lastThe end of the sequence.
compA binary predicate used for comparison.
Returns
A pair of iterator pointing to the smallest and largest elements of the range [first, last), if it is not an empty range; last, otherwise.
Template Parameters
ForwardIteratoris a model of Forward Iterator, and ForwardIterator's value_type is convertible to both comp's first_argument_type and second_argument_type.
BinaryPredicateis a model of Binary Predicate.

The following code snippet demonstrates how to use minmax_element to find the smallest and largest elements of a collection of key-value pairs.

#include <thrust/extrema.h>
#include <thrust/pair.h>
struct key_value
{
int key;
int value;
};
struct compare_key_value
{
__host__ __device__
bool operator()(key_value lhs, key_value rhs)
{
return lhs.key < rhs.key;
}
};
...
key_value data[4] = { {4,5}, {0,7}, {2,3}, {6,1} };
thrust::pair<key_value*,key_value*> extrema = thrust::minmax_element(data, data + 4, compare_key_value());
// extrema.first == data + 1
// *extrema.first == {0,7}
// extrema.second == data + 3
// *extrema.second == {6,1}
See also
min_element
max_element
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1840.pdf