- 순서
- map이란?
- map의 특
- unordered_map이란?
- map과 unordered_map의차이점
- 해싱
- 해시충돌
- map이란?
- 레드 블랙 트리 또는 이진 탐색 트리 기반으로 데이터를 저장하는 컨테이너 자료구조
- pair<const Key, T>로 이루어진 컨테이너로 key를 기준으로 오름차순 정렬된 상태임
- map의 특징
- key와 value 쌍으로 이루어진 트리로 중복을 허용하지 않음.
- first, second가 pair 객체로 저장되며 first는 key second는 value로 저장됨
- 시간 복잡도는 O(log n)이다.
- unordered_map이란?
- 해시 테이블을 기반으로 데이터를 저장하는 컨테이너 자료구조
- 정렬되지 않은 상태로 데이터를 저장하며, 데이터를 삽입한 순서와 다를 수 있음.
- 중복된 키를 허용하지 않음
- 시간 복잡도는 O(1)이다.
- map과 unordered_map의 차이점
| 항목 | std::map | std::unordered_map |
| 내부 구조 | 균형 이진 탐색 트리(대부분 RB-tree) | 해시 테이블(버킷 기반) |
| 키 순서 | 정렬(오름차순 기본) | 없음(임의 순서) |
| 시간복잡도 | O(log n)보장 | 평균 O(1), 최악 O(n) |
| 범위 연산 | lower_bound, upper_bound 가능 | 범위 연산 비효율적 |
| iterator 무효화 | 삭제된 원소만 무효화 | rehash시 모든 iterator 무효화 |
| 메모리 오버헤드 | 노드 포인터 등 | 버킷 배열 + 노드 |
| 사용 상황 | 키 정렬/범위 쿼리 필요할 때 | 빠른 조회가 최우선일 때 |
- 해싱
- 해시 함수를 사용하여 임의의 데이터를 고정된 크기의 해시값으로 변환하는 과정.
- 위 과정으로 생성된 해시 값으로 데이터를 해시 테이블이라는 자료구조의 특정 위치를 계산하여 데이터를 저장하고 검색하는 방식.
- 매우 빠르게 데이터에 접근할 수 있게 해주어 STL의 map과 unordered_set 같은 키-값 쌍을 저장하고 검색하는 자료구조의 기반이 됨
- 해시충돌
- 서로 다른 두 키가 같은 해시값을 갖는 상황
- 해시 함수 결과 공간은 유한한데, 입력 공간은 거의 무한=>비둘기집 원리에 의해 충돌은 필연적
- ex) 32비트 해시 함수 2의 32제곱 개의 값만 표현 가능. 하지만 이 이상 키를 넣으면 충돌 발생
- 해시 충돌의 문제점
- 충돌이 많아질수록 탐색 시간이 길어짐 => 성능 저하
- 보안적 문제(암호학 해시에서는 충돌 발견 시 안정성이 무너짐)
- 해시 충돌 해결 방법
- 체이닝
- 오픈 어드레싱
- unordered_map과 해시충돌
- unordered_map에서 이러한 충돌을 해결하기 위해 해시 테이블의 체이닝 기법을 사용함.
'CS > 자료구조' 카테고리의 다른 글
| [자료구조] vector와 list (0) | 2025.08.11 |
|---|---|
| [자료구조] Stack/Heap Memory (0) | 2025.08.05 |
| [C++] 우선순위 큐 (1) | 2025.07.24 |
| [자료구조]AVL트리 (2) | 2025.07.21 |