Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 쌍(Pair) 집합(Set) 완벽 정리 – 개념부터 예제까지


C++의 set(집합)은 연관 컨테이너(associative container)의 하나로, 중복을 허용하지 않는 고유한 요소들만 저장합니다. 한 번 컨테이너에 추가된 요소는 직접 수정할 수 없으며, 값을 변경하려면 해당 요소를 삭제한 뒤 새로운 요소를 삽입하는 방식으로만 가능합니다.

pair(쌍)는 <utility> 헤더에 정의되어 있으며, 두 개의 값을 하나로 묶어주는 역할을 합니다. pair는 타입이 같거나 서로 다른 두 값을 모두 저장할 수 있고, 멤버 함수인 first()와 second()를 통해 각 값에 개별적으로 접근할 수 있습니다.

pair 내부 요소의 순서는 항상 고정되어 있습니다(first, second). 이러한 특성 덕분에 서로 다른 타입의 이질적인(heterogeneous) 두 값을 하나의 단위로 결합할 때 매우 유용합니다.

pair의 요소에 접근하려면 첫 번째 요소는 변수명.first, 두 번째 요소는 변수명.second를 사용합니다.

C++에서 쌍(Pair)의 집합(Set)

  • 쌍의 집합(set of pairs)에는 중복된 pair가 허용되지 않습니다.
  • 집합에 저장된 요소(pair)들은 각 pair의 첫 번째 요소(key)를 기준으로 자동 정렬됩니다.
  • 특정 pair의 검색, 추가, 삭제뿐만 아니라 현재 저장된 pair의 개수 확인도 가능합니다.
  • 선언 문법은 다음과 같습니다 −
set< pair<datatype1, datatype2> > set_name;
set<pair<int, int>> set1;

위 코드에서 set1은 int형 값 두 개로 구성된 pair를 저장하는 set 객체입니다.

예제

#include <bits/stdc++.h>
using namespace std;
int main(){
    //pair<int, int> pairs;
    int arr[]={ 2, 3, 1, 6, 9, 7, 10, 2 };
    int n=8;
    set<pair<int,int>> set1;
    for (int i = 0; i < n-1 ; i++) {
        for (int j = i + 1; j < n; j++) {
            if (arr[i] % 2 == 1 && arr[j] % 2 == 1) {
                // 홀수로 이루어진 쌍 생성
                pair<int, int> p1 = make_pair(arr[i], arr[j]);
                // 집합에 삽입
                set1.insert(p1);
            }
        }
    }
    // 쌍 출력
    for (auto const &var : set1) {
        cout << "(" << var.first << ", "<< var.second << ")"<< " ";
    }
    // 집합 비우기
    set1.clear();
}

출력 결과

(1, 7) (1, 9) (3, 1) (3, 7) (3, 9) (9, 7)