C++/STL 컨테이너

STL 컨테이너 - map

coding-potato 2024. 11. 25. 01:50

map

**키(Key)와 값(Value)**의 관계를 기반으로 데이터를 저장하고 검색하는 기능을 제공합니다. std::map은 연관 배열(associative array) 또는 연관 컨테이너로 불리며, 내부적으로는 이진 검색 트리 또는 **레드-블랙 트리(Red-Black Tree)**를 사용하여 데이터의 삽입, 삭제, 검색 등의 연산을 효율적으로 처리합니다.

 

std::unordered_map과 헷갈린다면 아래 글에서 둘의 차이를 확인하세요.

https://coding-potato-record.tistory.com/268

 

STL 컨테이너 - unordered_map

unordered_map**STL(Standard Template Library)**에서 제공하는 연관 컨테이너로, 키-값 쌍(Key-Value Pair)을 저장하며, 내부적으로 **해시 테이블(Hash Table)**을 사용해 빠른 검색, 삽입, 삭제를 제공합니다. 이 컨

coding-potato-record.tistory.com

 

1. std::map의 특징

  • 연관 배열: std::map은 키(key)와 값(value)의 쌍을 저장하는 컨테이너입니다. std::pair 형식으로 데이터를 저장합니다. 따라서 std::pair 관련 연산(.first, .second)이 가능합니다. 
  • 자동 정렬: 기본적으로 std::map은 키를 자동으로 정렬합니다. 기본 정렬은 오름차순이며, 사용자가 정의한 비교 함수에 따라 정렬을 변경할 수 있습니다.
  • 고유한 키: 각 키는 고유해야 하며, 같은 키를 두 번 삽입할 수 없습니다. 동일한 키를 삽입하려고 하면 값만 갱신됩니다.
  • 탐색 효율성: 내부적으로 std::map은 Red-Black Tree를 사용하여 O(log n)의 시간 복잡도로 삽입, 삭제, 검색이 가능합니다.
  • 구조체/객체 사용 가능: 키와 값은 사용자 정의 타입으로도 사용할 수 있습니다.

2. 헤더 파일

std::map을 사용하려면 <map> 헤더파일을 포함해야 합니다.

3. 선언 및 초기화 방법

std::map은 템플릿을 이용해 선언합니다. 기본적인 선언과 초기화 방법은 다음과 같습니다.

  • 기본 선언

  • 초기화(2가지)

  • 예시

4. 주요 멤버 함수

함수명 설명 반환값
insert 키와 값을 삽입합니다. 이미 존재하는 키는 삽입되지 않습니다. 삽입이 성공하면 std::pair<iterator, bool> 반환 (삽입 여부와 iterator)
operator[] 주어진 키에 대한 값을 반환합니다. 키가 없다면 새로운 항목을 추가합니다. 값 타입 (value_type)
at 주어진 키에 대한 값을 반환합니다. 키가 존재하지 않으면 예외 std::out_of_range 발생. 값 타입 (value_type)
erase 주어진 키를 삭제합니다. 여러 요소를 삭제하는 방식도 제공. 삭제된 요소의 개수 또는 void
find 주어진 키를 검색하고, 해당 키가 존재하면 그 위치를 반환합니다. 키가 없으면 end() 반환. iterator (키가 없으면 end())
count 주어진 키가 몇 번 등장하는지 확인합니다. (특히 다중 맵에서 유용) 0 또는 1 (키가 존재하면 1, 없으면 0)
begin 맵의 첫 번째 요소를 가리키는 iterator를 반환합니다. iterator
end 맵의 마지막 요소 뒤를 가리키는 iterator를 반환합니다. iterator
empty 맵이 비어있는지 확인합니다. bool (비어있으면 true, 아니면 false)
size 맵에 저장된 요소의 개수를 반환합니다. size_t
clear 모든 요소를 삭제합니다. void
lower_bound 주어진 키보다 크거나 같은 첫 번째 요소를 찾습니다. iterator
upper_bound 주어진 키보다 큰 첫 번째 요소를 찾습니다. iterator
rbegin 맵의 마지막 요소를 가리키는 역방향 iterator를 반환합니다. reverse_iterator
rend 맵의 첫 번째 요소 앞을 가리키는 역방향 iterator를 반환합니다. reverse_iterator

'C++ > STL 컨테이너' 카테고리의 다른 글

STL 컨테이너 - queue  (0) 2025.01.07
STL 컨테이너 - stack  (0) 2025.01.07
STL 컨테이너 - list  (0) 2025.01.07
STL 컨테이너 - vector  (0) 2025.01.07
STL 컨테이너 - array  (0) 2025.01.07