이 게시물은 다음 링크를 참조하여 학습했습니다.
[C++] set container 정리 및 사용법
안녕하세요. BlockDMask 입니다 ! 오늘은 연관 컨테이너 set, multiset, map, multimap 중 set에 대해 학습해보겠습니다. 순서는 set container -> set의 사용법 -> set의 생성자와 연산자 -> set의 멤버 함수 -..
blockdmask.tistory.com
C++ set 사용법과 설명...
set에 대해 설명하고자 합니다. 사용법도요. 아마 set을 사용하려고 검색하셔서 오시게 된 분이시라면, set의 특징을 잘 아시는 분일겁니다. 네, set의 특징은 다음과 같습니다. 1. 숫자든 문자든 중
hwan-shell.tistory.com
[C++] map vs hash_map(unordered_map)
개요 hash_map은 비표준 Container인데 반해(stdext namespace에 포함) unordered_map은 C++11에서 STL 표준 Container로 추가되었으며, (사실 TR1부터 추가되었지만 C++11에서 좀 더 최적화가 이루어졌다고 합..
gracefulprograming.tistory.com
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의 멤버함수에 대해서는 아래 링크에서 자세히 확인할 수 있는데, 일단은 자주 사용할 멤버함수만 정리했따.
std::set - cppreference.com
template< class Key, class Compare = std::less , class Allocator = std::allocator > class set; (1) (2) (since C++17) std::set is an associative container that contains a sorted set of unique objects of type Key. Sorting is done using the
en.cppreference.com
함수 | 설명 |
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 |