Вы всегда можете написать свою собственную версию равной, которая эффективно делает то, что вы хотите:
template <class InputIterator1, class InputIterator2>
bool equalx(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2)
{
while ((first1 != last1) && (first2 != last2))
{
if (*first1 != *first2) // or: if (!pred(*first1,*first2)), for pred version
return false;
++first1; ++first2;
}
return (first1 == last1) && (first2 == last2);
}
Чтобы оба диапазона имели одинаковое количество элементов, подпись должна содержать конец второго диапазона.