이 게시물은 다음 링크를 참조하여 학습했습니다.
1. set
1-1. set
set은 쉽게 생각하면 수학의 "집합"을 생각하면 된다.
원소들을 저장할 때 중복을 허용하지 않는다.
또한, 항상 순서가 정렬되서 저장되는 특징을 갖는다.
내부적으로는 이진트리의 일종인 Red-Black Tree로 설계되어있다.
즉, 중복을 허용하지 않고, 저장된 자료들 중 특정 자료를 찾아야 할 때 용이하다.
set은 아래처럼 사용하면 된다!
1
2
3
4
5
6
|
#include <set>
set<int> S; // 기본( 큰 값 기준 정렬)
set<int, less<int> > S; // 큰 값 기준 정렬
set<int, greater<int> > S; // 작은 값 기준 정렬
|
cs |
1-2. unordered_set
unorederd의 사전적인 의미는 "무질서한"이다.
set은 set인데 정렬되지 않는 set이다.
unorderd_set의 가장 큰 특징은 Hash함수를 사용한다는 점이다.
다른 언어에서의 Hashset을 C++에서는 unordered_set으로 사용한다!
객체를 생성해서 set에서 사용할 경우 해시함수를 구현해야 하지만, 기본적인 자료형에 대해서는 해시함수를 제공한다고 한다!
다른분이 unordered_set vs set 성능비교를 한 게시물을 봤는데,
1. 일반적으로 데이터가 많은 경우 unordered_set이 set보다 성능면에서 유리하고
2. 문자열을 사용하는 경우 문자열이 길어질수록 unorderd_set이 set보다 성능이 떨어질 수 있고
3. 유사도가 높은 문자열이 많을 때 set의 성능이 떨어질 수 있다고 한다.
정렬된 데이터를 얻고자 하는 경우를 제외하고, 대량의 데이터일때는 unordered_set을 사용하는걸 추천한다고 한다!
unordered_set은 아래처럼 사용한다.
1
2
3
|
#include <set>
unordered_set<int> US;
|
cs |
2. 멤버함수
set의 멤버함수에 대해서는 아래 링크에서 자세히 확인할 수 있는데, 일단은 자주 사용할 멤버함수만 정리했따.
함수 | 설명 |
iterator begin(); | set이 시작 위치 주소 값 반환 |
iterator end(); | set이 끝나는 위치 주소 + 1값 반환 |
int size(); | set의 사이즈를 반환 |
bool empty(); | set이 비어있는지 확인 |
pair<iterator, bool> insert(value); | set에 value를 삽입. 반환값으로 pair의 iterator에는 저장 위치, bool 에는 저장 성공실패 여부를 반환한다. |
void erase(iterator position); | set의 position에 해당하는 값 삭제 |
void clear(); | set의 모든 원소 제거 |
iterator find(value); | set에 value가 있는지 확인. 반환값으로 iterator, 즉, value의 위치를 반환한다. |
int count(value); | set에 value가 있는지 확인. 반환값으로 int를 반환하는데, set은 중복을 허용하지 않으므로 0 또는 1 반환. |
iterator lower_bound(value); | set에 value가 처음 등장하는 위치 반환. 중복 허용X 이므로 원소의 위치! |
iterator upper_bound(value); | set에 value가 마지막 등장하는 위치 + 1 반환. 중복 허용X 이므로 원소의 위치 다음 위치! |
3. set에서의 반복문
set에서 저장된 모든 데이터를 사용해야 할 때, 반복문을 사용하는데 아래처럼 사용하면 된다.
1
2
3
|
for(int num : S){
cout << num << endl;
}
|
cs |
'Legacy' 카테고리의 다른 글
[Java#1] 입출력 (0) | 2022.04.29 |
---|---|
[C++#5-5] map (2) | 2022.04.18 |
[C++#5-3] queue (0) | 2022.04.18 |
[C++#5-2] stack (0) | 2022.04.18 |
[C++#5-1] vector (0) | 2022.04.18 |