728x90
728x90
set(집합)
특징
- 연관 컨테이너(Associative Container) 중 하나이다.
- 연관 컨테이너에는 set, multiset, map, multimap 이 있다.
- 특정 순서에 따라 고유한 요소를 저장하는 컨테이너이다.
- 기본적으로 요소들은 오름차순(less)으로 정렬되어 삽입된다.
- 중복되는 요소는 없고, 오로지 희소한(Unique) 값만 저장된다.
- map과 거의 동일하지만, set은 map과 다르게 키(Key)와 값(Value)이 같다고 생각하면 된다.
- 키(Key)라 불리는 요소들의 집합으로 이루어진 컨테이너라고 생각하면 된다.
- 노드 기반 컨테이너이며, 균형 이진 트리로 구현되어 있다.
- 이터레이터(Iterator)는 자동으로 중위 순회(Inordered Traversal)를 통하여 순서대로 키(Key)를 출력한다.
헤더 파일
- 집합(set)을 사용하려면 다음의 헤더 파일을 불러와야 한다.
#include <set>
멤버 함수
사용 방법
- map과 사용 방법이 비슷하다.
- 바로가기 : https://dev-astra.tistory.com/244
객체 생성
- 다음과 같이 객체를 생성한다.
set<[data_type]> [name]
#include <iostream>
#include <set>
using namespace std;
set<int> s1 {
1, 2, 3, 4, 6, 5, 7, 8, 10, 9
};
set<pair<string, int>> s2; // pair 객체를 인자로 넣어줄 수 있다.
int main() {
for (auto i : s1) {
cout << i << " ";
}
return 0;
}
1 2 3 4 5 6 7 8 9 10
첨자 연산자([ ])의 사용 불가능
- map과는 다르게 첨자([ ]) 연산자를 사용해서 원소를 추가 또는 수정이 불가능하다.
s[0] = 3; // 사용 불가능
요소 삽입
- 다음과 같이 insert() 함수를 사용하여 요소를 삽입할 수 있다.
- 하지만, 중복되는 요소를 삽입할 수 없다.
s.insert(11);
사용 예
#include <iostream>
#include <set>
using namespace std;
set<int> s1 {
1, 2, 3, 4, 6, 5, 7, 8, 10, 9
};
set<pair<string, int>> s2;
int main() {
for (auto i : s1) {
cout << i << " ";
}
cout << endl;
// 요소 삽입
s2.insert({ "test", 1 });
s2.insert({ "test", 2 });
s2.insert({ "test", 1 });
s2.insert({ "test", 3 });
for (auto i : s2) {
cout << i.first << " " << i.second << '\n';
}
// 집합의 크기 출력
cout << s1.size() << '\n';
cout << s2.size() << '\n';
return 0;
}
1 2 3 4 5 6 7 8 9 10
test 1
test 2
test 3
10
3
728x90
728x90
'Programming > C++' 카테고리의 다른 글
[C++] 2차원 배열을 특정 값으로 초기화 하는 방법 (0) | 2023.01.26 |
---|---|
[C++] 2차원 배열 동적 할당 방법 (new 연산자) (0) | 2022.12.08 |
[C++] multiset(중복 집합) (0) | 2022.11.09 |
[C++] multimap(멀티 맵) (0) | 2022.11.08 |
[C++] unordered_map (0) | 2022.11.08 |
[C++] map(맵) (0) | 2022.11.08 |
[C++] pair(페어)와 tuple(튜플) (0) | 2022.11.03 |
[C++] lower_bound(), upper_bound() ; 이진 탐색(Binary Search) (0) | 2022.11.01 |