본문 바로가기
Data Structure

Hash Table과 Map은 언제 사용하면 좋을까?

by W00gie 2021. 10. 18.
  Hash Table Map
삽입속도 O(1) O(logN)
삭제속도 O(1) O(logN)
검색속도 O(1) O(logN)

 

Hash와 Map의 핵심적인 차이점은 다음과 같다.

 

1. Hash table은 멀티스레드에서 동기화를 지원할 수 있다.

2. Map은 항상 정렬된 상태로 데이터가 유지된다.

3. Hash는 Hash Function을 이용해 O(1)의 검색속도를, Map은 O(logN)의 성능을 지닌다.

 

따라서 데이터의 양이 적을 경우 map보다 Hash Table의 성능이 우수해진다.

기본적으로 RB-Tree 기반으로 구현되어 자체적인 balancing이 가능하기에 성능은 트리의 레벨만에 영향을 받는다.

unordered_map은 HashTable 기반 컨테이너

 

http://veblush.github.io/ko/posts/map-vs-unorderedmap-for-string-key/

 

문자열 키의 map, unordered_map 성능 비교

map 과 unordered_map 은 키, 값을 저장할 수 있는 컨테이너다. map 은 Red-Black Tree 를 사용해 키의 순서를 유지하는 반면 unoredered_map 은 해시 테이블을 사용해 키의 순서를 유지하지 않는다. unordered_map

veblush.github.io

 

데이터의 수가 많고 멀티스레드 환경에서의 안전성을 고려한다면 HashTable의 사용도 고려할 수 있다.

다만 해시 테이블의 성능은 Hash Function에 지극히 의존적이기 때문에

사전에 Key의 분포를 알고 알맞는 Function을 작성할 수 있을때 사용하는것이 유용하다.

아래는 Thread Safety를 구현한 C++ 해시맵 오픈소스

 

 

https://github.com/kshk123/hashMap

 

GitHub - kshk123/hashMap: A concurrent thread-safe hash map implemented in C++

A concurrent thread-safe hash map implemented in C++ - GitHub - kshk123/hashMap: A concurrent thread-safe hash map implemented in C++

github.com