flat_map
flat_map (std::flat_map — 평탄 정렬 연관 컨테이너)
정렬된 키-값 쌍을 연속 메모리(벡터)에 저장하는 컨테이너 어댑터예요. std::map의 기능을 보다 캐시 친화적으로 제공해요. <flat_map> 헤더, C++23부터.
출처: cppreference
본문
flat map은 고유한 키를 가진 키-값 쌍을 담는 연관 컨테이너의 기능을 제공하는 컨테이너 어댑터예요. 키는 비교 함수 Compare를 이용해 정렬돼요.
template<
class Key,
class T,
class Compare = std::less<Key>,
class KeyContainer = std::vector<Key>,
class MappedContainer = std::vector<T>
> class flat_map;
flat_map 클래스 템플릿은 두 개의 기본 컨테이너(키 벡터, 값 벡터)를 감싸는 래퍼로 동작해요.
주요 특징:
std::map과 달리 노드 기반이 아니라 평탄(flat)한 벡터 두 개에 저장해요. 그래서 캐시 지역성이 좋고 탐색이 빨라요.- 정렬 상태를 유지하며, 삽입/삭제는 벡터 특성상 요소를 밀어야 해서 중간 조작이 상대적으로 비싸요.
- 임의 접근으로 키/값을 순회하기 쉽고,
operator[],at,find,lower_bound등 map과 겉보기 인터페이스가 유사해요.
std::flat_map<std::string, int> m;
m["apple"] = 3;
m["banana"] = 5;
// 정렬된 상태로 보관
대량 조회가 많고 쓰기가 적은 상황에서 std::map보다 좋은 선택이 될 수 있어요. C++23에 추가된 비교적 새 컨테이너예요.