C++ 표준 라이브러리의 std::map 은 자주 쓰이는 연관 컨테이너(associative container) 중 하나이다
std::map 은 key-value 쌍을 저장하는 컨테이너.key, value) 형태로 저장되고, key 를 기준으로 자동 정렬.std::map 은 자동 정렬 + 빠른 탐색을 제공하는 자료구조key 순서대로 정렬< 연산자지만, 사용자 정의 비교 함수(std::less 등)를 넣을 수도 있음std::multimap 을 사용O(log n)O(log n)O(log n)std::map<int, std::string> m;
m.insert({1, "one"});
m[2] = "two"; // operator[] 사용
auto it = m.find(1); // 키 1을 찾음
if (it != m.end()) {
std::cout << it->second; // "one"
}
m.erase(2); // 키 2 삭제
for (auto& [key, value] : m) {
std::cout << key << " => " << value << "\n";
}
예시
순서가 중요한 데이터 관리
사전(Dictionary) 구현
범위 탐색(lower_bound, upper_bound) 활용할 때
O(log n) 시간 복잡도로 동작1. 모든 노드는 빨강 또는 검정이다.
2. 루트 노드는 항상 검정이다.
3. 모든 리프(NULL, NIL 노드)는 검정이다.
4. 빨강 노드의 자식은 반드시 검정이다. (빨강이 연속으로 나오면 안 됨)
5. 루트에서 모든 리프(NULL)까지 가는 경로에는 같은 수의 검정 노드가 있어야 한다.
6. 이 규칙들 덕분에 트리가 한쪽으로 심하게 치우치지 않고 균형을 유지
O(log n)O(log n)O(log n)레드-블랙 트리의 높이는 항상 2 * log2(n+1) 이하로 유지되므로, 최악의 경우에도 균형이 크게 깨지지 않는다.
O(log n)을 보장.