Нет, нет единого алгоритма, который бы это делал. Но вы можете составить такую функцию с использованием std::mismatch
.
template<typename T1, typename T2>
int compare(T1 const& A, T2 const& B)
{
// find the first element which differs
auto mismatchPoint =
std::mismatch(std::begin(A), std::end(A), std::begin(B), std::end(B));
if (mismatchPoint.first == std::end(A)) {
// no elements differ
if (mismatchPoint.second == std::end(B))
return 0;
// A ends before B, so A < B
return -1;
} else if (mismatchPoint.second == std::end(B) {
// B ends before A, so B < A
return 1;
} else {
// compare the first different element
if (*mismatchPoint.first < *mismatchPoint.second)
return -1;
else
return 1;
}
}