Thrust

## ◆ equal() [4/4]

template<typename InputIterator1 , typename InputIterator2 , typename BinaryPredicate >
 bool thrust::equal ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate binary_pred )

`equal` returns `true` if the two ranges `[first1, last1)` and `[first2, first2 + (last1 - first1))` are identical when compared element-by-element, and otherwise returns `false`.

This version of `equal` returns `true` if and only if for every iterator `i` in `[first1, last1)`, `binary_pred(*i, *(first2 + (i - first1)))` is `true`.

Parameters
 first1 The beginning of the first sequence. last1 The end of the first sequence. first2 The beginning of the second sequence. binary_pred Binary predicate used to test element equality.
Returns
`true`, if the sequences are equal; `false`, otherwise.
Template Parameters
 InputIterator1 is a model of Input Iterator, and `InputIterator1's` `value_type` is convertible to `BinaryPredicate's` `first_argument_type`. InputIterator2 is a model of Input Iterator, and `InputIterator2's` `value_type` is convertible to `BinaryPredicate's` `second_argument_type`. BinaryPredicate is a model of Binary Predicate.

The following code snippet demonstrates how to use `equal` to compare the elements in two ranges modulo 2.

#include <thrust/equal.h>
struct compare_modulo_two
{
__host__ __device__
bool operator()(int x, int y) const
{
return (x % 2) == (y % 2);
}
};
...
int x[6] = {0, 2, 4, 6, 8, 10};
int y[6] = {1, 3, 5, 7, 9, 11};
bool result = thrust::equal(x, x + 5, y, compare_modulo_two());
// result is true