is_permutation

is_permutation (순열로 같은지 검사)

두 범위가 순서는 달라도 원소의 다중집합으로 같은지 검사하는 알고리즘이에요. <algorithm> 헤더에 있어요.

출처: cppreference

본문

is_permutation[first1, last1)[first2, last2)(또는 first2부터 시작)의 순열인지 검사해요. 즉 원소의 종류와 개수가 완전히 같은지 확인해요.

template< class ForwardIt1, class ForwardIt2 >
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
                     ForwardIt2 first2 );   // (1)

비교기 버전과 4-인자(끝 지정) 버전도 있어요.

template< class ForwardIt1, class ForwardIt2, class BinaryPred >
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
                     ForwardIt2 first2, BinaryPred p );   // (2)
    1. operator==로, 2) 술어 p로 비교해요.
  • 반환 값: 두 범위가 각각 다른 순열이면 true.
std::vector<int> a{1, 2, 3, 4, 5};
std::vector<int> b{5, 4, 3, 2, 1};
bool perm = std::is_permutation(a.begin(), a.end(), b.begin());   // true

순서는 무시하고 "같은 원소를 같은 개수로 들고 있는지"를 확인할 때 써요. 해시 대신 O(N²) 비교를 하므로 큰 범위에서는 비싼 편이에요.

더 알아보기 (Learn more)

cppreference