std::equal

From Cppreference

Jump to: navigation, search
Defined in header <algorithm>

template< class InputIterator1, class InputIterator2 >

bool equal( InputIterator1 first1, InputIterator1 last1,

            InputIterator2 first2 );
(1)
template< class InputIterator1, class InputIterator2, class BinaryPredicate >

bool equal( InputIterator1 first1, InputIterator1 last1,

            InputIterator2 first2, BinaryPredicate p );
(2)

Returns true if the elements are the same in two ranges: one defined by [first1, last1) and another starting at first2. The first version of the function uses ​operator== to compare the elements, the second uses the given binary predicate p.

Contents

Parameters

first1, last1 - the first range of the elements to compare
first2 - beginning of the second range of the elements to compare
p - binary predicate which returns ​true if the elements should be treated as equal.

The signature of the predicate function should be equivalent to the following:

bool pred(const Type1 &a, const Type2 &b);

The signature does not need to have const &, but the function must not modify the objects passed to it.
The types ​Type1​ and ​Type2​ must be such that objects of types ​InputIterator1​ and ​InputIterator2​ can be dereferenced and then implicitly converted to ​Type1​ and ​Type2​ respectively.

Return value

true if the elements in the two ranges are equal

Complexity

linear in the distance between first1 and last1

Equivalent function

First version:
template<class InputIterator1, class InputIterator2>
bool equal(InputIterator1 first1, InputIterator1 last1, 
           InputIterator2 first2)
{
    for (; first1 != last1; ++first1, ++first2) {
        if (!(*first1 == *first2)) {
            return false;
        }
    }
    return true;
}
Second version:
template<class InputIterator1, class InputIterator2, class BinaryPredicate>
bool equal(InputIterator1 first1, InputIterator1 last1, 
           InputIterator2 first2, BinaryPredicate p)
{
    for (; first1 != last1; ++first1, ++first2) {
        if (!p(*first1, *first2)) {
            return false;
        }
    }
    return true;
}

Example

The following code uses ​equal() to compare two vectors of integers:

std::vector<int> v1;
for (int i = 0; i < 10; i++) {
    v1.push_back(i);
}
 
std::vector<int> v2;
for (int i = 0; i < 10; i++) {
    v2.push_back(i);
}
 
if (std::equal(v1.begin(), v1.end(), v2.begin())) {
    std::cout << "equal";
} else {
    std::cout << "NOT equal";
}

Output:

​equal​
find
find_if
find_if_not


(C++0x)
finds the first element satisfying specific criteria
(function template)
lexicographical_compare
returns true if one range is lexicographically less than another
(function template)
mismatch
finds the first position where two ranges differ
(function template)
search
searches for a range of elements
(function template)
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
In other languages