특징
#include <map>
#include <unordered_map>
- 레드-블랙 트리 구조
- <key, value> pair 쌍
- key 값이 중복되지 않음
- key 값을 기준으로 오름차순 정렬
map | multimap | unordered_map | |
key 중복여부 | 중복 불가 | 중복 가능 | 중복 불가 |
정렬 | O | O | X |
생성
설명 | 코드 |
map 생성 | map<string, int> m |
map 안에 map 생성(value가 map) | map<string, map<int, int> > m |
참조 및 반복자
설명 | 코드 |
첫번째 원소의 주소값 | m.begin() |
마지막 원소의 다음 주소값 | m.end() |
마지막 원소의 주소값을 시작점으로 설정 | m.rbegin() |
첫번째 원소의 주소값을 끝점으로 설정 | m.rend() |
begin()과 같지만 const로 설정 | m.cbegin() |
end()와 같지만 const로 설정 | m.cend() |
rbegin()과 같지만 const로 설정 | m.crbegin() |
rend()와 같지만 const로 설정 | m.crend() |
수정자
설명 | 코드 |
key를 가진 value 삽입 | m.insert(make_pair(key, value)) |
key 원소 제거 | m.erase(key) |
begin과 end 범위 제거 | m.erase(m.begin(), m.end()) |
모든 원소 제거 | m.clear() |
move()를 사용해 객체를 저장 | m.emplace() |
삽입될 위치에 대한 힌트를 토대로 삽입 | m.emplace_hint() |
m과 m2의 원소를 바꿈 | m.swap(m2) |
크기
설명 | 코드 |
map의 크기를 반환 | m.size() |
원소를 가질 수 있는 최대 크기를 반환 | m.max_size() |
map이 비어있으면 True, 아니면 False를 반환 | m.empty() |
연산
설명 | 코드 |
key 위치의 iter 반환 ※ 존재하지 않으면 m.end() |
m.find(key) |
key의 개수 ※ 중복이 없으니 0 또는 1 |
m.count(key) |
key가 시작하는 구간의 반복자 | m.lower_bound(key) |
key가 끝나는 구간의 반복자 | m.upper_bound(key) |
key가 시작하고 끝나는 구간의 반복자 | m.equal_range(key) |
Value 기준으로 정렬하기
- Map 내에서는 Value 값을 기준으로 정렬할 수 없기 때문에 번거롭지만 vector에 옮겨서 정렬해야 한다.
// Value 내림차순 정렬
bool cmp(const pair<string, int>& a, const pair<string, int>& b) {
return a.second > b.second;
}
map<string, int> m;
vector<pair<string, int> > vec(m.begin(), m.end());
sort(vec.begin(), vec.end(), cmp);