- map 은 무엇인가?
map STL에 속한 컨테이너 중 하나로 key와 value로 이루어져 있으며 이는 pair 객체 형태로 저장된다. - unordered_map은 무엇인가?
unordered_map은 hash_table 기반의 hash container 이다.
기존의 map과 달리 이진 탐색트리가 아닌 해시 테이블로 구성 되어있다.
언뜻보면 hash_map과 똑같다고 볼 수 있지만 hash_map은 비표준 컨테이너 인데 반해 unordered_map은
c++11에서 STL 표준 컨테이너로 추가되었으며, hash_map과 거의 동일한 기능을 제공한다고 한다.
hash_map과 동일하다고 하지만 MSDN에서는 표준 컨테이너인 unordered map 사용을 권장하고 있다. - Hash Table은 무엇인가?
key아 value로 된 쌍을 저장하는 자료구조이고, c#에서 Dictionary와 같다. - map과 unordered_map의 차이점
map은 자료를 저장할 때 자동으로 정렬을하고, unordered_map은 정렬하지 않는다.
일반적으로 unordered_map이 map보다 성능이 더 좋지만 데이터의 양이 많으면 많을수록 map보다
성능이 더 떨어진다고 한다. 이유는 균형트리는 이론상 무조건 균형을 맞추게 되어 있기 때문이다.
따라서 데이터가 작다면 unordered_map을, 크다면 map을 사용하는 것이 바람직하다. - map과 unordered_map의 장단점
map의 장점 : 컨테이너에 속한 list나 vector보다 탐색 속도가 빠르기 때문에 검색에는 최적의 컨테이너이다.
map의 단점 : 키를 새로 추가할 때마다 정렬된 위치를 찾아서 추가를 해야 하므로 대용량의 맵을 작성하는 데에는
시간이 많이 소요됨
unordered_map의 장점 : hash로 인해 key를 통한 value로의 접근이 빠르고 적은 양의 자료에 유리
unordered_map의 단점 : 해시 충돌로 인하여 성능이 저하 될 수 있고 버킷으로 인해 메모리 사용양이 증가함 - map과 unordered_map의 시간 복잡도
map | unordered_map | |
검색 | O(logN) | O(1) |
삽입 | O(logN) | O(1) |
삭제 | O(logN) | O(1) |
map 활용 시 주의사항
자료를 저장할 때 자동으로 정렬된 상태로 저장하기 때문에 삽입 삭제가 빈번하면 안됨.- map이 사용하는 자료구조
map이 사용하는 자료구조는 "레드 블랙트리(Red-Black Tree)"라는 자료구조이다.
- 레드 블랙트리는 무엇인가?
자가균형이진탐색 트리로써, 대표적으로 "연관배열" 등을 구현하는데 쓰이는 자료구조이다.
트리에 n개의 원소가 있을때 O(logn)의 시간복잡도로 삽입, 삭제, 검색을 할 수 있다. - 레드 블랙트리는 어느 경우에 사용되는가?
이진 탐색 트리 중에 값이 한쪽으로 치우치게 되는 경우가 있다.
이런 경우, 이진 탐색 트리의 검색 효율을 나쁘게 하므로, 균형을 바로 잡기 위해서 해당 자료구조를 사용한다.
- map에서 사용하는 이유는?
map은 많은 자료를 정렬하여 저장하고 있고 빠른 검색을 필요로 할 때 자주 사용하게된다.
그러므로 map을 구현을 할 때 레드 블랙트리를 참고하면 좋을 것 같다.
복잡한 자료구조 이지만, 사용하는데 있어서 효율적이고, 최악의 경우에도 상당히 우수한 검색 속도를 보여준다.
'Programming > STL' 카테고리의 다른 글
C++(STL Container) vector (0) | 2020.09.27 |
---|---|
C++(STL Container) map (0) | 2020.09.27 |
C++(STL Container) list (0) | 2020.09.27 |
C++ STL이란? (0) | 2020.09.27 |
STL vector에서 push_back과 emplace_back의 차이점 (0) | 2019.12.04 |