##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::unordered_map::insert_or_assign

From cppreference.com
< cpp‎ | container‎ | unordered map

[edit template]

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

1,3) 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,4) Same as (1,3), except the mapped value is constructed from value_type(std::move(k), std::forward<M>(obj))

If rehashing occurs due to the insertion, 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(). If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid. (since C++17)

### [edit] 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
args | - | arguments to forward to the constructor of the element

### [edit] 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 element that was inserted or updated
3,4) Iterator pointing at the element that was inserted or updated

### [edit] Complexity

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

### [edit] Notes

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

### [edit] Example

| This section is incomplete Reason: no example

### [edit] See also

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

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/container/unordered_map/insert_or_assign&oldid=74464"
Category:

- Todo no example