Template Function thrust::unique_by_key(ForwardIterator1, ForwardIterator1, ForwardIterator2, BinaryPredicate)¶
Function Documentation¶
-
template<typename
ForwardIterator1
, typenameForwardIterator2
, typenameBinaryPredicate
>
thrust::pair<ForwardIterator1, ForwardIterator2>thrust
::
unique_by_key
(ForwardIterator1 keys_first, ForwardIterator1 keys_last, ForwardIterator2 values_first, BinaryPredicate binary_pred) unique_by_key
is a generalization ofunique
to key-value pairs. For each group of consecutive keys in the range[keys_first, keys_last)
that are equal,unique_by_key
removes all but the first element of the group. Similarly, the corresponding values in the range[values_first, values_first + (keys_last - keys_first))
are also removed.This version of
unique_by_key
uses the function objectbinary_pred
to test for equality andproject1st
to reduce values with equal keys.The following code snippet demonstrates how to use
unique_by_key
to compact a sequence of key/value pairs to remove consecutive duplicates.- Return
The end of the unique range
[first, new_last)
.- Pre
The range
[keys_first, keys_last)
and the range[values_first, values_first + (keys_last - keys_first))
shall not overlap.- Parameters
keys_first
: The beginning of the key range.keys_last
: The end of the key range.values_first
: The beginning of the value range.binary_pred
: The binary predicate used to determine equality.
- Template Parameters
ForwardIterator1
: is a model of Forward Iterator, andForwardIterator1
is mutable, andForwardIterator's
value_type
is a model of Equality Comparable.ForwardIterator2
: is a model of Forward Iterator, andForwardIterator2
is mutable.BinaryPredicate
: is a model of Binary Predicate.
#include <thrust/unique.h> ... const int N = 7; int A[N] = {1, 3, 3, 3, 2, 2, 1}; // keys int B[N] = {9, 8, 7, 6, 5, 4, 3}; // values thrust::pair<int*,int*> new_end; thrust::equal_to<int> binary_pred; new_end = thrust::unique_by_key(keys, keys + N, values, binary_pred); // The first four keys in A are now {1, 3, 2, 1} and new_end.first - A is 4. // The first four values in B are now {9, 8, 5, 3} and new_end.second - B is 4.
- See
unique
- See
unique_by_key_copy
- See
reduce_by_key