public member function


template <class... Args>iterator emplace_hint ( const_iterator position, Args&&... args );
Construct and insert element with hint
Inserts a new element in the unordered_set if its value is unique. This new element is constructed in place using args as the arguments for the element's constructor. position points to a location in the container suggested as a hint on where to start the search for its insertion point (the container may or may not use this suggestion to optimize the insertion operation).

The insertion only takes place if no element in the container has a value equivalent to the one being emplaced (elements in an unordered_set have unique values).

If inserted, this effectively increases the container size by one.

A similar member function exists, insert, which either copies or moves an existing object into the container, and may also take a position hint.


Position suggested as a hint for the insertion operation. This value may be used by the container to optimize the operation.
Member type const_iterator is a forward iterator type.
Arguments passed to the constructor of the a new element to be inserted.

Return value

If the insertion takes place (because no other element existed with the same value), the function returns an iterator to the inserted element.

Otherwise, it returns an iterator pointing to the element in the container that compared equivalent to it (it is not replaced).

Member type iterator is a forward iterator type.

All iterators in an unordered_set have const access to the elements: Elements can be inserted or removed, but not modified while in the container.

The storage for the new element is allocated using allocator_traits<allocator_type>::construct(), which may throw exceptions on failure (for the default allocator, bad_alloc is thrown if the allocation request does not succeed).


No example yet. See unordered_set::emplace's example.


Average case: constant.
Worst case: linear in container size.
May trigger a rehash (not included).

Iterator validity

On most cases, all iterators in the container remain valid after the insertion. The only exception being when the growth of the container forces a rehash. In this case, all iterators in the container are invalidated.

A rehash is forced if the new container size after the insertion operation would increase above its capacity threshold (calculated as the container's bucket_count multiplied by its max_load_factor).

References remain valid in all cases, even after a rehash.

See also