💡 퀵 접속: cpp.kr/includes

includes

C++ 표준 라이브러리의 알고리즘으로, 정렬된 범위가 다른 정렬된 범위의 모든 요소를 포함하는지 확인합니다. 첫 번째 범위가 두 번째 범위의 모든 요소를 포함하면 true를, 그렇지 않으면 false를 반환합니다.

기본 사용법

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::vector<int> v2 = {2, 4, 6, 8};
    
    // v1이 v2의 모든 요소를 포함하는지 확인
    bool result = std::includes(v1.begin(), v1.end(),
                              v2.begin(), v2.end());
    
    std::cout << "v1이 v2의 모든 요소를 포함하는가? " 
              << (result ? "예" : "아니오") << std::endl;
    
    // 다른 예시
    std::vector<int> v3 = {2, 4, 6, 8, 10, 12};
    result = std::includes(v1.begin(), v1.end(),
                         v3.begin(), v3.end());
    
    std::cout << "v1이 v3의 모든 요소를 포함하는가? " 
              << (result ? "예" : "아니오") << std::endl;
    
    return 0;
}

실행 결과:

v1이 v2의 모든 요소를 포함하는가? 예
v1이 v3의 모든 요소를 포함하는가? 아니오

커스텀 비교 함수 사용

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v1 = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
    std::vector<int> v2 = {8, 6, 4, 2};
    
    // 내림차순으로 정렬된 벡터에서 포함 관계 확인
    bool result = std::includes(v1.begin(), v1.end(),
                              v2.begin(), v2.end(),
                              std::greater<int>());
    
    std::cout << "v1이 v2의 모든 요소를 포함하는가? " 
              << (result ? "예" : "아니오") << std::endl;
    
    return 0;
}

실행 결과:

v1이 v2의 모든 요소를 포함하는가? 예

사용자 정의 타입에서 사용

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

struct Person {
    std::string name;
    int age;
    
    bool operator<(const Person& other) const {
        return age < other.age;
    }
};

int main() {
    std::vector<Person> group1 = {
        {"Alice", 20},
        {"Bob", 25},
        {"Charlie", 30},
        {"David", 35},
        {"Eve", 40}
    };
    
    std::vector<Person> group2 = {
        {"Bob", 25},
        {"David", 35}
    };
    
    // group1이 group2의 모든 요소를 포함하는지 확인
    bool result = std::includes(group1.begin(), group1.end(),
                              group2.begin(), group2.end());
    
    std::cout << "group1이 group2의 모든 요소를 포함하는가? " 
              << (result ? "예" : "아니오") << std::endl;
    
    return 0;
}

실행 결과:

group1이 group2의 모든 요소를 포함하는가? 예

참고사항

  • includes는 algorithm 헤더에 정의되어 있습니다.
  • 입력 범위는 반드시 정렬되어 있어야 합니다.
  • 기본적으로 < 연산자를 사용하여 비교합니다.
  • 커스텀 비교 함수를 제공할 수 있습니다.
  • 시간 복잡도는 O(n + m)입니다 (n, m은 각 범위의 크기).
  • 중복된 요소도 고려합니다.
함수 설명
includes(first1, last1, first2, last2) 기본 비교 연산자를 사용하여 포함 관계 확인
includes(first1, last1, first2, last2, comp) 커스텀 비교 함수를 사용하여 포함 관계 확인