template<class ForwardIterator1, class ForwardIterator2>
bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2);
template<class ForwardIterator1, class ForwardIterator2,
class BinaryPredicate>
bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, BinaryPredicate pred);
template<class ForwardIterator1, class ForwardIterator2>
bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2);
template<class ForwardIterator1, class ForwardIterator2,
class BinaryPredicate>
bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred);
Requires: ForwardIterator1 и ForwardIterator2 должен иметь один и тот же тип значения. Функция сравнения должна быть отношением эквивалентности.
Remarks: Если last2 не было указано в списке аргументов, это обозначается first2 + (last1 - first1) ниже.
Returns: Если last1 - first1 != last2 - first2, вернись false. В противном случае return, true если существует перестановка элементов в диапазоне [first2, first2 + (last1 - first1)), начиная с ForwardIterator2 begin, так что equal(first1, last1, begin) возвращается true или equal(first1, last1, begin, pred) возвращается true; в противном случае возвращается false.
Complexity: Нет приложений соответствующего предиката if ForwardIterator1 и, ForwardIterator2 отвечающих требованиям итераторов произвольного доступа и last1 - first1 != last2 - first2. В противном случае точно last1 - first1 приложения соответствующего предиката if equal(first1, last1, first2, last2) вернутся, true если pred он не указан в списке аргументов, или equal(first1, last1, first2, last2, pred) вернутся, true если pred был задан в списке аргументов; в противном случае, в худшем случае O(N2), где N имеет значение last1 - first1.