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)