본문 바로가기

Algorithm/A. Intro & STL

11. Map & Multimap

map(맵)은 key와 value 쌍을 저장하는 연관 컨테이너이다. 헤더파일 <map>을 인클루드하면 map을 사용할 수 있다. map 클래스는 <map>에서 인클루드하는 헤더파일 <bits/stl_map.h>에 정의되어 있다.

 

set과 마찬가지로 map의 key는 중복될 수 없다. 또한 map에는 key와 value가 존재하므로 선언할 때 key의 자료형과 value의 자료형을 모두 명시해야 한다. key와 value는 pair 객체의 형태로 map에 존재한다.

 

map의 멤버 함수는 set의 멤버 함수와 거의 같다. 기본적으로 set의 모든 멤버 함수가 map에도 내장되어 있고 기능이 같기 때문에 set에 내장된 멤버 함수에 대한 설명은 이전 글을 참고하면 된다. set에 내장되지 않은 map의 멤버 함수는 다음과 같다:

m.insert_or_assign(x,y); key x에 해당하는 value를 y로 설정한다.
m.try_emplace(x,y); m에 key x가 존재하지 않을 경우 m에 pair 객체 <x, y>를 삽입한다.
m.try_emplace(p,x,y); m에 key x가 존재하지 않을 경우 m에 pair 객체 <x, y>를 삽입한다.
m.at(x); key x에 해당하는 value를 반환한다.

$m$에 key $x$가 존재하지 않을 경우 map::insert_or_assign 함수와 map::try_emplace 함수의 실행 결과는 같다. key $x$가 존재할 경우 map::insert_or_assign 함수는 그 key에 해당하는 value를 $y$로 바꾸고, map::try_emplace 함수는 아무것도 하지 않는다. 두 함수 모두 C++17 표준이므로 이전 표준에서는 작동하지 않는다.

 

map::at 함수는 C++11 표준으로 key $x$에 해당하는 value를 반환하는데, key $x$가 존재하지 않을 경우 std::out_of_range exception이 발생한다. 이 함수와 거의 비슷하게 동작하는 [] 연산자가 map에 오버로드되어 있다. $m[x]$는 $m$의 key $x$에 해당하는 value를 의미한다. 만약 $m$에 key $x$가 존재하지 않을 경우 새로운 pair 객체가 생성된다.


multimap(멀티맵)은 key의 중복이 가능한 map이다. 헤더파일 <map>을 인클루드하면 사용할 수 있다. multimap 클래스는 <map>에서 인클루드하는 헤더파일 <bits/stl_multimap.h>에 정의되어 있다.

 

multimap의 선언과 멤버 함수는 set, multiset과 같다. 이에 대한 설명은 역시 이전 글을 참고하면 된다. 또한 multimap은 key의 중복이 가능하므로 $[]$ 연산자가 오버로드되어 있지 않다.

 

→ solved.ac tag: tree_set

'Algorithm > A. Intro & STL' 카테고리의 다른 글

13. String  (0) 2021.01.17
12. Unordered Container  (0) 2021.01.15
10. Set & Multiset  (0) 2021.01.13
9. Pair & Tuple  (2) 2021.01.12
8. Priority Queue  (0) 2021.01.12