std::map - cppreference.com

From cppreference.com

Defined in header

<map>

template<classKey,classT,classCompare=std::less<Key>,classAllocator=std::allocator<std::pair<constKey,T>>>classmap; (1) namespacepmr{template<classKey,classT,classCompare=std::less<Key>>usingmap=std::map<Key,T,Compare,std::pmr::polymorphic_allocator<std::pair<constKey,T>>>;} (2) (since C++17)std::map is a sorted associative container that contains key-value pairs with unique keys. Keys are sorted by using the comparison function Compare. Search, removal, and insertion operations have logarithmic complexity. Maps are usually implemented as

Red–black trees

.

Iterators of std::map iterate in ascending order of keys, where ascending is defined by the comparison that was used for construction. That is, given

m, a std::map

it_l and it_r, dereferenceable iterators to m, with it_l<it_r.

m.value_comp()(*it_l,*it_r)==true (least to greatest if using the default comparison).

Everywhere the standard library uses the

Compare

requirements, uniqueness is determined by using the equivalence relation. In imprecise terms, two objects a and b are considered equivalent (not unique) if neither compares less than the other: !comp(a,b)&&!comp(b,a).

std::map meets the requirements of

Container

,

AllocatorAwareContainer

,

AssociativeContainer

and

ReversibleContainer

.

All member functions of std::map are constexpr: it is possible to create and use std::map objects in the evaluation of a constant expression.

However, defining a constexprstd::map variable is generally an error, because constant evaluation requires any dynamically allocated storage to be released in the same evaluation, which is usually not the case with std::map's initializer.

(since C++26)Template parameters

Member types

Type Definition key_typeKey

[edit]

mapped_typeT

[edit]

value_typestd::pair<constKey,T>

[edit]

size_typeunsigned integer type (usually

std::size_t

)

[edit]

difference_typesigned integer type (usually

std::ptrdiff_t

)

[edit]

key_compareCompare

[edit]

allocator_typeAllocator

[edit]

referencevalue_type&

[edit]

const_referenceconstvalue_type&

[edit]

pointerAllocator::pointer

(until C++11)std::allocator_traits<Allocator>::pointer

(since C++11)

[edit]

const_pointerAllocator::const_pointer

(until C++11)std::allocator_traits<Allocator>::const_pointer

(since C++11)

[edit]

iterator

LegacyBidirectionalIterator

and

ConstexprIterator

(since C++26) to value_type

[edit]

const_iterator

LegacyBidirectionalIterator

and

ConstexprIterator

(since C++26) to constvalue_type

[edit]

reverse_iteratorstd::reverse_iterator<iterator>

[edit]

const_reverse_iteratorstd::reverse_iterator<const_iterator>

[edit]

node_type(since C++17)a specialization of

node handle

representing a container node

[edit]

insert_return_type(since C++17)type describing the result of inserting a node_type, a specialization of template<classIter,classNodeType>struct/* unspecified */{Iterposition;boolinserted;NodeTypenode;};instantiated with template arguments iterator and node_type.

[edit]

Member classes

Member functions

(constructor)

constructs the map
(public member function)

[edit]

(destructor)

destructs the map
(public member function)

[edit]

operator=

assigns values to the container
(public member function)

[edit]

get_allocator

returns the associated allocator
(public member function)

[edit]

Element access

at

access specified element with bounds checking
(public member function)

[edit]

operator[]

access or insert specified element
(public member function)

[edit]

Iterators

begincbegin

(C++11)

returns an iterator to the beginning
(public member function)

[edit]

endcend

(C++11)

returns an iterator to the end
(public member function)

[edit]

rbegincrbegin

(C++11)

returns a reverse iterator to the beginning
(public member function)

[edit]

rendcrend

(C++11)

returns a reverse iterator to the end
(public member function)

[edit]

Capacity

empty

checks whether the container is empty
(public member function)

[edit]

size

returns the number of elements
(public member function)

[edit]

max_size

returns the maximum possible number of elements
(public member function)

[edit]

Modifiers

clear

clears the contents
(public member function)

[edit]

insert

inserts elements or nodes(since C++17)
(public member function)

[edit]

insert_range

(C++23)

inserts a range of elements
(public member function)

[edit]

insert_or_assign

(C++17)

inserts an element or assigns to the current element if the key already exists
(public member function)

[edit]

emplace

(C++11)

constructs element in-place
(public member function)

[edit]

emplace_hint

(C++11)

constructs elements in-place using a hint
(public member function)

[edit]

try_emplace

(C++17)

inserts in-place if the key does not exist, does nothing if the key exists
(public member function)

[edit]

erase

erases elements
(public member function)

[edit]

swap

swaps the contents
(public member function)

[edit]

extract

(C++17)

extracts nodes from the container
(public member function)

[edit]

merge

(C++17)

splices nodes from another container
(public member function)

[edit]

Lookup

count

returns the number of elements matching specific key
(public member function)

[edit]

find

finds element with specific key
(public member function)

[edit]

contains

(C++20)

checks if the container contains element with specific key
(public member function)

[edit]

equal_range

returns range of elements matching a specific key
(public member function)

[edit]

lower_bound

returns an iterator to the first element not less than the given key
(public member function)

[edit]

upper_bound

returns an iterator to the first element greater than the given key
(public member function)

[edit]

Observers

key_comp

returns the function that compares keys
(public member function)

[edit]

value_comp

returns the function that compares keys in objects of type value_type
(public member function)

[edit]

Non-member functions

Notes

Feature-test

macro ValueStdFeature

__cpp_lib_containers_ranges

202202L

(C++23)Ranges construction and insertion for containers

__cpp_lib_constexpr_map

202502L

(C++26)Constexpr std::mapExample

Run this code

#include<iostream>#include<map>#include<string>#include<string_view>voidprint_map(std::string_viewcomment,conststd::map<std::string,int>&m){std::cout<<comment;// Iterate using C++17 facilitiesfor(constauto&[key,value]:m)std::cout<<'['<<key<<"] = "<<value<<"; ";// C++11 alternative:// for (const auto& n : m)// std::cout << n.first << " = " << n.second << "; ";//// C++98 alternative:// for (std::map<std::string, int>::const_iterator it = m.begin(); it != m.end(); ++it)// std::cout << it->first << " = " << it->second << "; ";std::cout<<'\n';}intmain(){// Create a map of three (string, int) pairsstd::map<std::string,int>m{{"CPU",10},{"GPU",15},{"RAM",20}};print_map("1) Initial map: ",m);m["CPU"]=25;// update an existing valuem["SSD"]=30;// insert a new valueprint_map("2) Updated map: ",m);// Using operator[] with non-existent key always performs an insertstd::cout<<"3) m[UPS] = "<<m["UPS"]<<'\n';print_map("4) Updated map: ",m);m.erase("GPU");print_map("5) After erase: ",m);std::erase_if(m,[](constauto&pair){returnpair.second>25;});print_map("6) After erase: ",m);std::cout<<"7) m.size() = "<<m.size()<<'\n';m.clear();std::cout<<std::boolalpha<<"8) Map is empty: "<<m.empty()<<'\n';}Output:

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 Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior

LWG 230

C++98 Key was not required to be

CopyConstructible

(a key of type Key might not be able to be constructed) Key is also required to
be

CopyConstructible

LWG 464

C++98 accessing a const map by key was inconvenient at function provided See also

collection of key-value pairs, sorted by keys
(class template)

[edit]

(C++11)

collection of key-value pairs, hashed by keys, keys are unique
(class template)

[edit]

(C++23)

adapts two containers to provide a collection of key-value pairs, sorted by unique keys
(class template)

[edit]