• 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

+ Recent posts