[STL] Map 컨테이너

map 컨테이너

연관 컨테이너로 원소를 key와 value의 쌍으로 저장한다.
set은 원소를 key하나로 저장하지만 map은 원소를 key와 value 쌍으로 저장하며, map도 key의 중복 저장을 하지 못하지만 중복저장을 원한다면 multiset을 사용해야한다.

map은 [ ] 연산자를 제공하여 key에 해당하는 원소의 value에 쉽게 접근하거나 변경할 수 있다.

 

균형 이진 트리: 모든 노드가 부모보다 왼쪽이 작고 오른쪽이 큰 형태. (반대라면 반대로)

 

연관 컨테이너는 균형 이진 트리를 사용하므로 찾기연산( find(), lower_bound(), upper_bound(), equal_range(), count())에 뛰어난 성능(로그 시간)을 보이며 insert 또한 로그 시간 복잡도를 보인다.

 

중복을 허용하는 multimap 컨테이너

템플릿 형식, 인터페이스, 멤버의 형식 모두 map과 같고, key가 중복으로 저장되는 컨테이너
중복 key를 허용하는 대신 [ ] 연산자를 제공하지 않는다.

 

map 의 주요 인터페이스

템플릿 형식  
template <
typename key,
typename value,
typename Pred = less<key>,
typename Allocator = allocator<pair <const key, value> >
class map
key는 value는 map 컨테이너의 원소의 key와 value의 형식이다.
Pred는 정렬 기준인 조건자. 기존 조건자는 less

 

생성자

생성자
map m m는 빈 컨테이너
map m(pred) m는 빈 컨테이너로 정렬 기준은 pred 조건자를 사용한다.
map m(m2) m는 m2의 컨테이너의 복사본이다(복사 생성자호출)
map m(b, e) m는 반복자 구간 [b, e)로 초기화된 원소를 같는다.
map m(b, e, pred) m는 반복자 구간 [b, e)로 초기화된 원소를 갖는다,. 정렬 기준은 pred 조건자를 사용한다.

 

멤버함수

멤버함수
p=m.begin() p는 m의 첫 원소를 가리키는 반복자(const, 비 const 버전이 있음.)
m.clear() m의 모든 키, 원소를 제거한다.
n = m.count(k) 키 k의 개수를 반환한다.
m.empty() m이 비어있는지 확인
p=m.end() p는 m의 끝을 표시하는 반복자 (const, 비 const 버전이 있음.)
pr=m.equal.range(k) pr은 k 원소의 반복자 구간인 pair 객체다. (const, 비 const 버전이 있음.)
q=m.erase(k) m의 키 k가 가리키는 키와 value를 제거하고 q에는 다음 반복ㅈ가를 넣는다.
q=m.erase(b,e) m의 b부터 e 까지의 시퀀스 구간을 제거하고 q는 다음 원소를 가리킨다.
n=s.erase(k) k 원소를 제거한다. n은 제거한 개수
pr=m.insert(pair(k,v)) m 컨테이너에 k(키)와 v(value)를 삽입한다. pr은 삽입한 원소의 가리키는 반복자와 성공 여부의 bool 값인 pair객체
q=s.insert(p,pair(k,v)) p가 가리키는 위치에 pair k(키), v(value)를 삽입한다. q는 삽입한 원소를 가리키는 반복자. 
s.insert(b(pair(k,v)),e(pair(k,v))) p가 가리키는 위치에 반복자 b(pair(k,v))부터 e(pair(k,v))까지의 시퀀스 구간원소를 삽입한다.
p=m.lower_bound(k) p는 k의 시작 구간을 가리키는 반복자다 (const, 비 const 버전이 있음)
n=m.max_size() n은 m가 담을 수 있는 최대 메모리 크기이다.
p=m.rbegin() p는 m의 역 순차열의 첫번째 원소를 가리키는 반복자(reverse begin의 줄임말로 end()와 같다)
p=m.rend() p는 m의 역 순차열의 마지막 원소를 가리키는 반복자(reverse end의 줄임말로 begin()와 같다)
m.size( ) 원소의 갯수
m.swap(m2) m와 m2를 swap한다.
p=m.upper_bound(k) p는 k의 끝 구간을 가리키는 반복자(const, 비 const 버전이 있음)

 

연산자

연산자
m1 == m2 m1과 m2의 모든 Key와 원소가 같은가 (bool 형식)
m1 != m2 m1과 m2의 모든 Key와 원소 중 하나라도 다른 원소가 있는가? (bool 형식)
m1 < m2 사전식 비교로 m2가 m1보다 하나라도 큰 원소가 있는가? (bool 형식)
m1 <= m2 사전식 비교로 m2가 m1보다 하나라도 같거나 큰 원소가 있는가? (bool 형식)
m1 > m2 사전식 비교로 m1이 m2보다 하나라도 큰 원소가 있는가? (bool 형식)
m1 >= m2 사전식 비교로 m1이 m2보다 하나라도 같거나 큰 원소가 있는가? (bool 형식)
m[k] = v m 컨테이너에 원소(k, v)를 추가하거나 key에 해당하는 원소의 value를 v로 갱신한다.
multimap은 사용 불가

 

멤버형식

멤버형식
allocator_type 메모리 관리자 형식
const_iterator const 반복자 형식
const_pointer const value_type *형식
const_reference const value_type& 형식
const_reverse_iterator const 역 반복자 형식
difference_type 두 반복자 차이의 형식
iterator 반복자 형식
key_compare 키(key) 조건자(비교) 형식
key_type 키(key)의 형식
mapped_type 값(value)의 형식
pointer value_type* 형식
reference value_type& 형식
reverse_iterator 역 반복자 형식
size_type 첨자(index)나 원소의 개수 등의 형식
value_type 원소의 형식

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

[STL] Set 컨테이너  (0) 2025.03.22
[STL] 6장 문제풀이  (0) 2025.03.17
[STL] list 컨테이너  (0) 2025.03.16
[STL] Deque 컨테이너  (0) 2025.03.15
[STL] Vector 컨테이너  (0) 2025.03.10