- 맵(map)은 연관 컨테이너 중 하나로서, 키(key)를 통해 값(value)을 확인하고 관리하기 위해 사용합니다. map은 key값의 중복을 허용하지 않으며, key와 value를 pair 형태로 저장합니다.
- map은 이진 트리 구조로 이루어져 있으며, 이를 통하여 key와 value쌍을 정렬할 수 있다는 점이 특징입니다. map에 key와 value쌍들이 정렬될 때에는 기본적으로 key를 기준으로 하여 오름차순으로 정렬됩니다.
- map 컨테이너를 사용하기 위해서는 아래와 같이 <map> 헤더를 포함해야 하고, 선언할 때는 컨테이너에 들어갈 key와 value의 타입을 명시해주어야 합니다. 사용자의 편의에 따라서 정렬 방식을 선언할 때 정할 수도 있습니다.
#include <map>
std::map<type1, type2> m1; // std namespace 사용 시 std 생략가능, key와 value 순서대로 type 명시
std::map<type1, type2, greater<type1>> m2; // key를 내림차순으로 정렬한 map
std::map<type1, type2, compare> m3; // 구조체 compare를 기준으로 key를 정렬한 map
- 또한 다른 컨테이너들처럼 map 생성 시 초기값을 설정할 수 있는 데, pair형식으로 값을 생성해야 합니다.
map<string, int> m1 = {make_pair("January", 1), make_pair("July", 7)}; // pair를 만들어 저장
map<string, int> m2 = {{"January", 1}, {"July", 7}}; // 이렇게 pair를 생성해도 무방함
<map의 멤버 함수>
-std::map<string, int> m; 와 string key; 로 선언되어 있다고 가정합니다-
1) 삽입과 삭제
m.insert({key, value}); |
-> map에 key와 value 쌍을 삽입합니다.
m.erase(key); |
-> map에 key가 존재하면 해당하는 key와 value 쌍을 제거합니다.
m.clear(); |
-> map의 모든 원소를 제거합니다.
2) 원소 참조
*map의 경우 반복자가 pair를 가리키므로 반복자 itr에 대하여 itr->first, itr->second와 같이 참조할 수 있습니다. (각각 key와 value를 참조)
m.begin(); |
m.end(); |
m.rbegin(); |
m.rend(); |
-> m.begin()은 map의 첫 번째 원소의 반복자를 리턴하고, m.end()는 map의 마지막 원소의 다음 원소의 반복자를 리턴합니다.
-> m.rbegin()과 m.rend()는 위의 begin()과 end()랑 반대로(reverse) 동작합니다.
m.find(key); |
-> 만약 key가 map에 있을 경우 원소 key의 반복자를 리턴하고, 그렇지 않을 경우 end()를 리턴합니다.
m.upper_bound(key); |
m.lower_bound(key); |
m.upper_bound(key)는 key값이 저장된 원소의 위치 다음의 반복자를 리턴하고, m.lower_bound(key)는 key값이 저장된 원소의 반복자를 리턴합니다.
m.key_comp(); |
-> map의 기준이 되는 정렬 방식을 리턴합니다. 지금과 같은 경우에는 less<string> 을 리턴합니다.
3) 사이즈 관련
m.size(); |
-> map에 저장된 원소의 개수를 리턴합니다. (pair 한 쌍을 한 개의 원소로 취급합니다.)
m.empty(); |
-> map이 비어있는지 확인합니다. 비어있으면 1, 그렇지 않으면 0을 리턴합니다.
'프로그래밍 언어 > C++ STL' 카테고리의 다른 글
C++ STL queue (0) | 2023.02.21 |
---|---|
C++ STL stack (0) | 2023.01.24 |
C++ STL set (1) | 2022.12.27 |
C++ STL vector (0) | 2022.12.04 |
C++ STL 개요 (0) | 2022.11.25 |
댓글