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 |