Namespaces
Variants
Actions

std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::insert_or_assign

From cppreference.com
 
 
 
 
template< class M >
std::pair<iterator, bool> insert_or_assign( const Key& k, M&& obj );
(1) (since C++17)
template< class M >
std::pair<iterator, bool> insert_or_assign( Key&& k, M&& obj );
(2) (since C++17)
template< class K, class M >
std::pair<iterator, bool> insert_or_assign( K&& k, M&& obj );
(3) (since C++26)
template< class M >
iterator insert_or_assign( const_iterator hint, const Key& k, M&& obj );
(4) (since C++17)
template< class M >
iterator insert_or_assign( const_iterator hint, Key&& k, M&& obj );
(5) (since C++17)
template< class K, class M >
iterator insert_or_assign( const_iterator hint, K&& k, M&& obj );
(6) (since C++26)
1,4) If a key equivalent to k already exists in the container, assigns 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,5) Same as (1,4), except the mapped value is constructed from value_type(std::move(k), std::forward<M>(obj)).
3,6) If a key equivalent to k already exists in the container, assigns std::forward<M>(obj) to the mapped_type corresponding to the key k. If the key does not exist, constructs an object u of value_type with std::forward<K>(k), std::forward<M>(obj)), then inserts u into *this. If hash_function()(u.first) != hash_function()(k) || contains(u.first) is true, the behavior is undefined. The value_type must be EmplaceConstructible into unordered_map from std::forward<K>(k), std::forward<M>(obj). This overload participates in overload resolution only if Hash and KeyEqual are both transparent. This assumes that such Hash is callable with both K and Key type, and that the KeyEqual is transparent, which, together, allows calling this function without constructing an instance of Key.

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 after the operation the new number of elements is greater than old