[C++] Map vs Set vs Priority Queue
2023. 12. 7. 16:10ㆍ프로그래밍 언어/C++\C
맵과 셋, 우선순위 큐는 항상 헷갈린다. 이번에 확실히 정리해 보자.
Map, multi Map
맵은 기본적으로 레드-블랙 트리를 사용한 자료구조이다. key, value쌍을 가지며 key를 기준으로 오름차순 정렬하여 저장한다. 레드-블랙 트리로 구성되어 있으므로 항상 트리의 높이가 log n을 유지한다. 또, 중복을 허용하지 않고 multi Map만 중복을 허용한다.
맵은 주로 고유한 키와 값을 연결하여 정렬할 필요가 있을 때 사용한다. 또, 모든 값에 대해 빠른 접근과 삽입/삭제를 지원한다.
Set, MultiSet
셋 또한 레드-블랙 트리를 사용한 자료구조이다. value 하나의 값만을 가지며 오름차순 정렬이 디폴트이며 중복을 허용하지 않는다.
셋은 고유한 값에 대한 정렬된 자료구조가 필요할 때 사용한다. Map과 거의 똑같지만 key-value가 아닌 value만 가지고 있는 것이 차이점이다.
Prioirty Queue
우선순위 큐는 기본적으로 최대 힙으로 구현되어 있다. 중복된 값을 허용하며 가장 높은 우선순위의 원소에 위의 두 자료구조보다 빠른 O(1) 시간에 접근이 가능하다. 삽입, 삭제는 log n이 소모된다.
우선순위 큐는 가장 높은 우선순위의 원소에 가장 빠르게 접근할 수 있다. multi set과 똑같은 기능을 하는 것처럼 보이지만 multi set은 모든 원소에 균등한 접근 속도를 지원한다면 우선순위 큐는 가장 높은 원소에만 굉장히 빠른 속도를 지원한다.
'프로그래밍 언어 > C++\C' 카테고리의 다른 글
[C++] 잡기술) 맵의 모든 요소를 벡터로 옮기기 (1) | 2023.12.07 |
---|---|
[C++] 정렬 기준 설정해서 정렬하기, map, prioiry_queue에도 사용 가능 (1) | 2023.12.07 |
[C++] 이분 탐색 메서드 - binary_search, lower_bound, upper_bound (0) | 2023.09.07 |
[C++] 2차원 배열과 벡터의 동적 할당 (0) | 2023.09.06 |
[C++] 네임스페이스와 ::연산자 - 코드 구조화와 충돌 방지의 핵심 (0) | 2023.08.22 |