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
.
- Parameters
-
exec | The execution policy to use for parallelization. |
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. |
- Returns
- The end of the unique range
[first, new_last)
.
- Template Parameters
-
- Precondition
- 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:
...
const int N = 7;
int A[N] = {1, 3, 3, 3, 2, 2, 1};
int B[N] = {9, 8, 7, 6, 5, 4, 3};
- See also
- unique
-
unique_by_key_copy
-
reduce_by_key