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

FreeBSD Manual Pages

  
 
  

home | help
std::unorde...t_or_assign(3)  C++ Standard Libary std::unorde...t_or_assign(3)

NAME
       std::unordered_map::insert_or_assign	 -     std::unordered_map::in-
       sert_or_assign

Synopsis
	  template <class M>
	  std::pair<iterator, bool> insert_or_assign( const Key&  k,  M&&  obj
       (1) (since C++17)
	  );
	  template			    <class			    M>
       (2) (since C++17)
	  std::pair<iterator, bool> insert_or_assign( Key&& k, M&& obj );
	  template <class M>
	  iterator insert_or_assign( const_iterator hint, const	 Key&  k,  M&&
       (3) (since C++17)
	  obj );
	  template <class M>
	  iterator  insert_or_assign(  const_iterator  hint,  Key&& k, M&& obj
       (4) (since C++17)
	  );

	  1,3) If a key	equivalent to k	already	exists in the  container,  as-
       signs
	  std::forward<M>(obj)	to the mapped_type corresponding to the	key k.
       If the key does
	  not exist, inserts the new value as if by  insert,  constructing  it
       from value_type(k,
	  std::forward<M>(obj))
	  2,4) Same as (1,3), except the mapped	value is constructed from
	  value_type(std::move(k), std::forward<M>(obj))

	  The behavior is undefined
	  (until C++20)
	  The program is ill-formed
	  (since C++20)	if std::is_assignable_v<mapped_type&, M&&> is false.

	  If  an insertion occurs and results in a rehashing of	the container,
       all iterators
	  are invalidated. Otherwise iterators are  not	 affected.  References
       are not
	  invalidated.	Rehashing occurs only if the new number	of elements is
       greater than
	  max_load_factor()*bucket_count().

Parameters
	  k    - the key used both to look up and to insert if not found
	  hint - iterator to the position before which the new element will be
       inserted
	  obj  - the value to insert or	assign

Return value
	  1,2) The bool	component is true if  the  insertion  took  place  and
       false if	the
	  assignment took place. The iterator component	is pointing at the el-
       ement that was
	  inserted or updated
	  3,4) Iterator	pointing at the	element	that was inserted or updated

Complexity
	  1,2) Same as for emplace
	  3,4) Same as for emplace_hint

Notes
	  insert_or_assign  returns  more information than operator[] and does
       not require
	  default-constructibility of the mapped type.

	  Feature-test macro: __cpp_lib_unordered_map_try_emplace

Example
       // Run this code

	#include <iostream>
	#include <unordered_map>
	#include <string>

	auto print_node	= [](const auto	&node) {
	    std::cout << "[" <<	node.first << "] = " <<	node.second << '\n';
	};

	auto print_result = [](auto const &pair) {
	    std::cout << (pair.second ?	"inserted: " : "assigned: ");
	    print_node(*pair.first);
	};

	int main()
	{
	    std::unordered_map<std::string, std::string> myMap;

	    print_result( myMap.insert_or_assign("a", "apple"	  ) );
	    print_result( myMap.insert_or_assign("b", "banana"	  ) );
	    print_result( myMap.insert_or_assign("c", "cherry"	  ) );
	    print_result( myMap.insert_or_assign("c", "clementine") );

	    for	(const auto &node : myMap) { print_node(node); }
	}

Possible output:
	inserted: [a] =	apple
	inserted: [b] =	banana
	inserted: [c] =	cherry
	assigned: [c] =	clementine
	[c] = clementine
	[a] = apple
	[b] = banana

See also
	  operator[] access or insert specified	element
	  (C++11)    (public member function)
	  at	     access specified element with bounds checking
	  (C++11)    (public member function)
		     inserts elements
	  insert     or	nodes
	  (C++11)    (since C++17)
		     (public member function)
	  emplace    constructs	element	in-place
	  (C++11)    (public member function)

http://cppreference.com		  2022.07.31	  std::unorde...t_or_assign(3)

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

home | help