Namespaces
Variants

std:: map

From cppreference.net
헤더 파일에 정의됨 <map>
template <

class Key,
class T,
class Compare = std:: less < Key > ,
class Allocator = std:: allocator < std:: pair < const Key, T >>

> class map ;
(1)
namespace pmr {

template <
class Key,
class T,
class Compare = std:: less < Key >
> using map = std :: map < Key, T, Compare,
std:: pmr :: polymorphic_allocator < std:: pair < const Key, T >>> ;

}
(2) (C++17부터)

std::map 는 고유한 키를 가진 키-값 쌍을 포함하는 정렬된 연관 컨테이너입니다. 키들은 Compare 비교 함수를 사용하여 정렬됩니다. 검색, 삭제 및 삽입 연산은 로그 시간 복잡도를 가집니다. 맵은 일반적으로 Red–black trees 로 구현됩니다.

std::map 의 반복자는 키의 오름차순으로 순회하며, 여기서 오름차순은 생성 시 사용된 비교 함수에 의해 정의됩니다. 즉, 다음과 같이 주어졌을 때

  • m , std::map
  • it_l it_r , m 에 대한 역참조 가능한 반복자들, it_l < it_r 조건을 만족함.

m. value_comp ( ) ( * it_l, * it_r ) == true (기본 비교 함수를 사용하는 경우 오름차순).

표준 라이브러리가 Compare 요구 사항을 사용하는 모든 곳에서, 유일성은 동등 관계를 사용하여 결정됩니다. 비공식적으로 표현하면, 두 객체 a b 는 어느 한쪽도 다른 쪽보다 작지 않을 경우 동등한 것으로(유일하지 않은 것으로) 간주됩니다: ! comp ( a, b ) && ! comp ( b, a ) .

std::map Container , AllocatorAwareContainer , AssociativeContainer 그리고 ReversibleContainer 요구 사항을 충족합니다.

std::map 의 모든 멤버 함수는 constexpr 입니다: 상수 표현식 평가에서 std::map 객체를 생성하고 사용하는 것이 가능합니다.

그러나 일반적으로 std::map 객체 자체는 constexpr 일 수 없습니다. 동적으로 할당된 저장 공간은 동일한 상수 표현식 평가에서 해제되어야 하기 때문입니다.

(C++26부터)

목차

템플릿 매개변수

멤버 타입

타입 정의
key_type Key
mapped_type T
value_type std:: pair < const Key, T >
size_type 부호 없는 정수 타입 (일반적으로 std::size_t )
difference_type 부호 있는 정수 타입 (일반적으로 std::ptrdiff_t )
key_compare Compare
allocator_type Allocator
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(C++11 이전)

std:: allocator_traits < Allocator > :: pointer

(C++11 이후)
const_pointer

Allocator::const_pointer

(C++11 이전)

std:: allocator_traits < Allocator > :: const_pointer

(C++11 이후)
iterator LegacyBidirectionalIterator ConstexprIterator (C++26 이후) to value_type
const_iterator LegacyBidirectionalIterator ConstexprIterator (C++26 이후) to const value_type
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >
node_type (C++17 이후) 컨테이너 노드를 나타내는 node handle 의 특수화
insert_return_type (C++17 이후) node_type 삽입 결과를 설명하는 타입,

template < class Iter, class NodeType >
struct /*unspecified*/
{
Iter     position ;
bool inserted ;
NodeType node ;
} ;

의 특수화로, 템플릿 인자 iterator node_type 으로 인스턴스화됨

멤버 클래스

value_type 타입의 객체를 비교합니다
(클래스)

멤버 함수

map 을 생성합니다
(public member function)
map 을 소멸시킵니다
(public member function)
컨테이너에 값을 할당합니다
(public member function)
관련 할당자 반환
(public member function)
요소 접근
범위 검사와 함께 지정된 요소에 접근
(public member function)
지정된 요소에 접근하거나 삽입
(public member function)
반복자
시작 부분에 대한 반복자를 반환합니다
(public member function)
(C++11)
끝을 가리키는 반복자를 반환합니다
(public member function)
역방향 반복자를 시작 부분으로 반환합니다
(public member function)
(C++11)
역방향 반복자를 끝 위치로 반환합니다
(public member function)
용량
컨테이너가 비어 있는지 확인합니다
(public member function)
요소의 개수를 반환합니다
(public member function)
가능한 최대 원소 개수를 반환합니다
(public member function)
수정자
내용을 지웁니다
(public member function)
요소 삽입 또는 노드 (C++17부터)
(public member function)
요소들의 범위를 삽입합니다
(public member function)
요소를 삽입하거나 키가 이미 존재하는 경우 현재 요소에 할당합니다
(public member function)
(C++11)
제자리에서 요소를 생성합니다
(public member function)
힌트를 사용하여 제자리에서 요소를 생성합니다
(public member function)
키가 존재하지 않으면 제자리에서 삽입하고, 키가 존재하면 아무 작업도 수행하지 않음
(public member function)
요소를 삭제합니다
(public member function)
내용을 교환합니다
(public member function)
(C++17)
컨테이너에서 노드를 추출합니다
(public member function)
(C++17)
다른 컨테이너로부터 노드를 연결합니다
(public member function)
조회
특정 키와 일치하는 요소의 수를 반환합니다
(public member function)
특정 키를 가진 요소를 찾습니다
(public member function)
(C++20)
컨테이너가 특정 키를 가진 요소를 포함하는지 확인합니다
(public member function)
특정 키와 일치하는 요소들의 범위를 반환합니다
(public member function)
주어진 키보다 작지 않은 첫 번째 요소에 대한 반복자를 반환합니다
(public member function)
주어진 키보다 첫 번째 요소에 대한 반복자를 반환합니다
(public member function)
관찰자
키를 비교하는 함수를 반환합니다
(public member function)
value_type 타입의 객체에서 키를 비교하는 함수를 반환합니다
(public member function)

비멤버 함수

(C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20)
map 의 값을 사전식으로 비교합니다
(함수 템플릿)
std::swap 알고리즘을 특수화합니다
(함수 템플릿)
특정 조건을 만족하는 모든 요소를 삭제합니다
(함수 템플릿)

추론 가이드

(C++17부터)

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_containers_ranges 202202L (C++23) 컨테이너를 위한 범위 기반 생성 및 삽입
__cpp_lib_constexpr_map 202502L (C++26) constexpr std::map

예제

#include <iostream>
#include <map>
#include <string>
#include <string_view>
void print_map(std::string_view comment, const std::map<std::string, int>& m)
{
    std::cout << comment;
    // C++17 기능을 사용한 순회
    for (const auto& [key, value] : m)
        std::cout << '[' << key << "] = " << value << "; ";
// C++11 대안:
//  for (const auto& n : m)
//      std::cout << n.first << " = " << n.second << "; ";
//
// C++98 대안:
//  for (std::map<std::string, int>::const_iterator it = m.begin(); it != m.end(); ++it)
//      std::cout << it->first << " = " << it->second << "; ";
    std::cout << '\n';
}
int main()
{
    // 세 개의 (string, int) 쌍으로 구성된 맵 생성
    std::map<std::string, int> m{{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};
    print_map("1) 초기 맵: ", m);
    m["CPU"] = 25; // 기존 값 업데이트
    m["SSD"] = 30; // 새 값 삽입
    print_map("2) 업데이트된 맵: ", m);
    // 존재하지 않는 키로 operator[]를 사용하면 항상 삽입이 수행됨
    std::cout << "3) m[UPS] = " << m["UPS"] << '\n';
    print_map("4) 업데이트된 맵: ", m);
    m.erase("GPU");
    print_map("5) 삭제 후: ", m);
    std::erase_if(m, [](const auto& pair){ return pair.second > 25; });
    print_map("6) 삭제 후: ", m);
    std::cout << "7) m.size() = " << m.size() << '\n';
    m.clear();
    std::cout << std::boolalpha << "8) 맵이 비어 있음: " << m.empty() << '\n';
}

출력:

1) Initial map: [CPU] = 10; [GPU] = 15; [RAM] = 20;
2) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30;
3) m[UPS] = 0
4) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; [UPS] = 0;
5) After erase: [CPU] = 25; [RAM] = 20; [SSD] = 30; [UPS] = 0;
6) After erase: [CPU] = 25; [RAM] = 20; [UPS] = 0;
7) m.size() = 3
8) Map is empty: true

결함 보고서

다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 230 C++98 Key CopyConstructible 요구사항을 충족하지 않음
( Key 타입의 키가 생성되지 못할 수 있음)
Key 또한
CopyConstructible 요구사항을 충족해야 함
LWG 464 C++98 const map 에 키로 접근하는 것이 불편함 at 함수 제공

참고 항목

키-값 쌍의 컬렉션, 키로 정렬됨
(클래스 템플릿)
키-값 쌍의 컬렉션, 키로 해싱됨, 키는 고유함
(클래스 템플릿)
(C++23)
두 개의 컨테이너를 적응시켜 키-값 쌍의 컬렉션을 제공하며, 고유 키로 정렬됨
(클래스 템플릿)