Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::map(3)		      C++ Standard Libary		   std::map(3)

NAME
       std::map	- std::map

Synopsis
	  Defined in header <map>
	  template<

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

	  > class map;
	  namespace pmr	{

	      template<
		  class	Key,
		  class	T,
		  class		  Compare	    =		std::less<Key>
       (2) (since C++17)
	      >	using map = std::map<Key, T, Compare,

	   std::pmr::polymorphic_allocator<std::pair<const Key,	T>>>;

	  }

	  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
	  Redblack trees.

	  Iterators of std::map	iterate	in ascending order of keys, where  as-
       cending 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,  AllocatorAwareCon-
       tainer,
	  AssociativeContainer and ReversibleContainer.

Template parameters
	   This	section	is incomplete
	   Reason: Add descriptions of the template parameters.

Member types
	  Member type		    Definition
	  key_type		    Key
	  mapped_type		    T
	  value_type		    std::pair<const Key, T>
	  size_type		       Unsigned	   integer    type    (usually
       std::size_t)
	  difference_type	       Signed	 integer     type     (usually
       std::ptrdiff_t)
	  key_compare		    Compare
	  allocator_type	    Allocator
	  reference		    value_type&
	  const_reference	    const value_type&
				    Allocator::pointer
       (until C++11)
	  pointer		     std::allocator_traits<Allocator>::pointer
       (since C++11)

				    Allocator::const_pointer
       (until
										    C++11)
	  const_pointer				 std::allocator_traits<Alloca-
       tor>::const_pointer (since
										    C++11)

	  iterator		    LegacyBidirectionalIterator	to value_type
	  const_iterator	      LegacyBidirectionalIterator   to	 const
       value_type
	  reverse_iterator	    std::reverse_iterator<iterator>
	  const_reverse_iterator    std::reverse_iterator<const_iterator>
	  node_type (since C++17)   a specialization of	node handle represent-
       ing a container
				    node
				    type describing the	result of inserting  a
       node_type, a
				    specialization of

				    template<class Iter, class NodeType>
				    struct /*unspecified*/
	  insert_return_type (since {
	  C++17)			Iter	 position;
					bool	 inserted;
					NodeType node;
				    };
				    instantiated with template arguments iter-
       ator and
				    node_type.

Member classes
	  value_compare	compares objects of type value_type
			(class)

Member functions
	  constructor	   constructs the map
			   (public member function)
	  destructor	   destructs the map
			   (public member function)
	  operator=	   assigns values to the container
			   (public member function)
	  get_allocator	   returns the associated allocator
			   (public member function)

Element	access
	  at		   access specified element with bounds	checking
			   (public member function)
	  operator[]	   access or insert specified element
			   (public member function)

Iterators
	  begin		   returns an iterator to the beginning
	  cbegin	   (public member function)
	  (C++11)
	  end		   returns an iterator to the end
	  cend		   (public member function)
	  (C++11)
	  rbegin	   returns a reverse iterator to the beginning
	  crbegin	   (public member function)
	  (C++11)
	  rend		   returns a reverse iterator to the end
	  crend		   (public member function)
	  (C++11)

Capacity
	  empty		   checks whether the container	is empty
			   (public member function)
	  size		   returns the number of elements
			   (public member function)
	  max_size	   returns the maximum possible	number of elements
			   (public member function)

Modifiers
	  clear		   clears the contents
			   (public member function)
			   inserts elements
	  insert	   or nodes
			   (since C++17)
			   (public member function)
	  insert_range	   inserts a range of elements
	  (C++23)	   (public member function)
	  insert_or_assign  inserts  an	element	or assigns to the current ele-
       ment if the key
	  (C++17)	   already exists
			   (public member function)
	  emplace	   constructs element in-place
	  (C++11)	   (public member function)
	  emplace_hint	   constructs elements in-place	using a	hint
	  (C++11)	   (public member function)
	  try_emplace	   inserts in-place if the key does  not  exist,  does
       nothing if the key
	  (C++17)	   exists
			   (public member function)
	  erase		   erases elements
			   (public member function)
	  swap		   swaps the contents
			   (public member function)
	  extract	   extracts nodes from the container
	  (C++17)	   (public member function)
	  merge		   splices nodes from another container
	  (C++17)	   (public member function)

Lookup
	  count		    returns  the  number of elements matching specific
       key
			   (public member function)
	  find		   finds element with specific key
			   (public member function)
	  contains	   checks if the container contains element with  spe-
       cific key
	  (C++20)	   (public member function)
	  equal_range	   returns range of elements matching a	specific key
			   (public member function)
			   returns  an	iterator to the	first element not less
       than the	given
	  lower_bound	   key
			   (public member function)
	  upper_bound	   returns an iterator to the  first  element  greater
       than the	given key
			   (public member function)

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

Non-member functions
	  operator==
	  operator!=
	  operator<
	  operator<=
	  operator>
	  operator>=	      lexicographically	compares  the  values  of  two
       maps
	  operator<=>	      (function	template)
	  (removed in C++20)
	  (removed in C++20)
	  (removed in C++20)
	  (removed in C++20)
	  (removed in C++20)
	  (C++20)
	  std::swap(std::map) specializes the std::swap	algorithm
			      (function	template)
	  erase_if(std::map)  erases all elements satisfying specific criteria
	  (C++20)	      (function	template)

	    Deduction guides (since C++17)

Notes
	      Feature-test macro       Value	Std		      Feature
	  __cpp_lib_containers_ranges  202202L (C++23) Ranges construction and
       insertion for
						      containers

Example
       // Run this code

	#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;
	    // Iterate using C++17 facilities
	    for	(const auto& [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';
	}

	int main()
	{
	    // Create a	map of three (string, int) pairs
	    std::map<std::string,  int>	 m{{"CPU",  10},  {"GPU", 15}, {"RAM",
       20}};

	    print_map("1) Initial map: ", m);

	    m["CPU"] = 25; // update an	existing value
	    m["SSD"] = 30; // insert a new value
	    print_map("2) Updated map: ", m);

	    // Using operator[]	with non-existent key always performs  an  in-
       sert
	    std::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,  [](const	auto&  pair){ return pair.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 retroac-
       tively to
	  previously published C++ standards.

	    DR	  Applied to	       Behavior	as published		  Cor-
       rect behavior
			     Key was not required to be
	  LWG  230 C++98      CopyConstructible				Key is
       also required to
			     (a	key of type Key	might  not  be	able  to    be
       CopyConstructible
			     be	constructed)
	  LWG  464  C++98	accessing  a  const map	by key was	    at
       function	provided
			     inconvenient

See also
	  unordered_map	collection of key-value	pairs, hashed  by  keys,  keys
       are unique
	  (C++11)	(class template)

Category:
	    * Todo with	reason

http://cppreference.com		  2024.06.10			   std::map(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::map&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help