◆ unique_by_key() [3/4]

template<typename DerivedPolicy , typename ForwardIterator1 , typename ForwardIterator2 , typename BinaryPredicate >
__host__ __device__ thrust::pair<ForwardIterator1,ForwardIterator2> thrust::unique_by_key ( const thrust::detail::execution_policy_base< DerivedPolicy > &  exec,
ForwardIterator1  keys_first,
ForwardIterator1  keys_last,
ForwardIterator2  values_first,
BinaryPredicate  binary_pred 

unique_by_key is a generalization of unique 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 object binary_pred to test for equality and project1st to reduce values with equal keys.

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

execThe execution policy to use for parallelization.
keys_firstThe beginning of the key range.
keys_lastThe end of the key range.
values_firstThe beginning of the value range.
binary_predThe binary predicate used to determine equality.
The end of the unique range [first, new_last).
Template Parameters
DerivedPolicyThe name of the derived execution policy.
ForwardIterator1is a model of Forward Iterator, and ForwardIterator1 is mutable, and ForwardIterator's value_type is a model of Equality Comparable.
ForwardIterator2is a model of Forward Iterator, and ForwardIterator2 is mutable.
BinaryPredicateis a model of Binary Predicate.
The range [keys_first, keys_last) and the range [values_first, values_first + (keys_last - keys_first)) shall not overlap.

The following code snippet demonstrates how to use unique_by_key to compact a sequence of key/value pairs to remove consecutive duplicates using the thrust::host execution policy for parallelization:

#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
new_end = thrust::unique_by_key(thrust::host, 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 also