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 im-
     plemented as
	Redablack trees.

	Iterators of std::map iterate in ascending order of keys, where  ascend-
     ing 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 de-
     fault
	comparison).

	Everywhere  the  standard library uses the Compare requirements, unique-
     ness 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.

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			    (un-
     til 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 representing 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	iterator
     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 element 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 noth-
     ing 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	specific
     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  in-
     sertion 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 insert
	  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		 Correct
     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 CopyCon-
     structible
			   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)

home | help