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이 가능하기에 성능은 트리의 레벨만에 영향을 받는다.
http://veblush.github.io/ko/posts/map-vs-unorderedmap-for-string-key/
데이터의 수가 많고 멀티스레드 환경에서의 안전성을 고려한다면 HashTable의 사용도 고려할 수 있다.
다만 해시 테이블의 성능은 Hash Function에 지극히 의존적이기 때문에
사전에 Key의 분포를 알고 알맞는 Function을 작성할 수 있을때 사용하는것이 유용하다.
아래는 Thread Safety를 구현한 C++ 해시맵 오픈소스
https://github.com/kshk123/hashMap
'Data Structure' 카테고리의 다른 글
힙(Heap)을 통한 우선순위 큐 구현 (0) | 2021.11.25 |
---|---|
Stack의 구현은 벡터 vector ? 연결리스트 Linkedlist ? (0) | 2021.10.17 |
원형 큐 (circular queue) (0) | 2021.08.08 |