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>>
	  using	 map  =	 std::map<Key, T, Compare,			   (2)
       (since C++17)
	  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
	  red-black trees.

	  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.

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&
	  pointer					    Allocator::pointer
       (until C++11)
				    std::allocator_traits<Allocator>::pointer
       (since C++11)
				    Allocator::const_pointer
       (until
	  const_pointer
       C++11)
				    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>
	  insert_return_type (since struct /*unspecified*/ {
	  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_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 in the map
	  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)

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 (strings, 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
       Correct behavior
	  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)

http://cppreference.com		  2022.07.31			   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.0>

home | help