본문 바로가기
알고리즘/기본

[C++/STL] 셋(Set), 맵(Map)

by E145 2020. 6. 7.
반응형

 

 

1. 셋(Set)

 

셋(Set) 이란?

 

 - 완전 이진 트리 형태로 정렬되어 있기 때문에 빠른 검색 속도를 보장한다.

 

 - 원소 삽입, 삭제, 탐색 등의 연산은 O(logn)을 보장한다.

 

 - 중복된 원소는 추가할 수 없다.

 


 

셋 사용 방법

 

 - 셋 선언

// 헤더 선언 필요
#include <set>

// int 자료형을 저장하는 셋 선언
set<int> s;

 

 - 원소 추가

// 원소 n 추가
s.insert(n);

 

 - 원소 탐색

// 원소 n 찾기, 해당 원소가 존재하면 해당 주소 반환, 없으면 s.end() 반환.
s.find(n);

 

 - 원소 제거

// 값이 n인 원소 제거
s.erase(n);

// 모든 원소 제거
s.clear();

 

 - 기타

// set의 크기(원소의 개수) 반환
s.size();

 


 

2. 맵(Map)

 

맵(Map) 이란?

 

 - 키와 값 형태의 데이터를 보관하는 딕셔너리형 자료 구조.

 

 - 원소 삽입, 삭제, 탐색 등의 연산은 O(logn)을 보장한다.

 

 - 중복된 원소는 추가할 수 없다.

 


 

 

맵 사용 방법

 

 - 맵 선언

// 헤더 선언 필요
#include <map>

// int, string 자료형을 저장하는 맵 선언
map<int, string> m;

 

 - 원소 추가

// 원소 추가(insert)
m.insert(1, "test1");

// 원소 추가(인덱스)
// 해당 키 값이 존재하지 않으면 원소가 추가되고, 존재하면 값이 수정된다.
m[2] = "test2";

 

 - 원소 조회

// 원소 찾기
// 해당 key가 존재하면 iterator 반환. 없으면 m.end() 반환.
m.find(key);

auto mf = m.find(3);
cout << mf->first << " : " << mf->second << endl;

 

 - 원소 제거

// key에 해당하는 원소 제거
m.erase(key);

// 모든 원소 제거
m.clear();

 

 - 기타

// 저장된 원소 개수 출력
m.size();

 


 

3. 멀티 셋, 멀티 맵

 

 - 셋과 맵은 중복 key를 허용하지 않지만, 멀티 셋과 멀티 맵은 중복 key를 허용한다.

 

 - 선언 방법

// 헤더 선언 필요
#include<set>
#include<map>

// 사용법은 일반 셋, 맵과 동일하다.
multiset<int> ms;
multimap<int, int> mm;

 


 

 

4. unordered_set, unordered_map

 

 - 원소들이 순서대로 정렬되어 들어가지 않는다.

 

 - 삽입, 삭제, 조회가 평균 O(1)를 보장한다.(최악의 경우는 O(n))

 

 - 해시 함수를 이용하여 저장 공간을 결정한다.

 

 - 너무 빈번하게 자료를 삽입, 삭제하지 않고 많은 자료 저장과 빠른 검색 속도를 사용할 때 사용한다.

 

 - 선언 방법

// 헤더 선언 필요
#include<unordered_set>
#include<unordered_map>

// 사용 방법은 set, map과 동일하다
unordered_set<int> us;
unordered_map<int, int> um;
반응형

'알고리즘 > 기본' 카테고리의 다른 글

비트마스크  (0) 2020.11.30
[C++/STL] Algorithm  (0) 2020.06.14
[C++/STL] 페어(Pair)  (0) 2020.06.07
[C++/STL] 덱(Deque)  (0) 2020.06.07
[C++/STL] 큐(Queue), 우선순위 큐(Priority Queue)  (0) 2020.06.07

댓글