##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::map::emplace

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

[edit template]

template< class... Args > std::pair<iterator,bool> emplace( Args&&... args ); |  | (since C++11)

Inserts a new element into the container by constructing it in-place with the given `args` if there is no element with the key in the container.

Careful use of `emplace` allows the new element to be constructed while avoiding unnecessary copy or move operations. The constructor of the new element (i.e. std::pair<const Key, T>) is called with exactly the same arguments as supplied to `emplace`, forwarded via std::forward<Args>(args)....

No iterators or references are invalidated.

### [edit] Parameters

args | - | arguments to forward to the constructor of the element

### [edit] Return value

Returns a pair consisting of a bool denoting whether the insertion took place and an iterator to the inserted element, or the already-existing element if no insertion happened.

### [edit] Exceptions

If an exception is thrown by any operation, this function has no effect.

### [edit] Complexity

Logarithmic in the size of the container.

### [edit] Example

Run this code

    #include <iostream>
    #include <utility>
    #include <string>

    #include <map>
    int main()
    {
        std::map<std::string, std::string> m;

        // uses pair's move constructor (overload 8)
        m.emplace(std::make_pair(std::string("a"), std::string("a")));

        // uses pair's converting move constructor (overload 5)
        m.emplace(std::make_pair("b", "abcd"));

        // uses pair's template constructor (overload 3)
        m.emplace("d", "ddd");

        // uses pair's piecewise constructor (overload 6)
        m.emplace(std::piecewise_construct,
                  std::forward_as_tuple("c"),
                  std::forward_as_tuple(10, 'c'));

        for (const auto &p : m) {
            std::cout << p.first << " => " << p.second << '\n';
        }
    }

Output:

    a => a
    b => abcd
    c => cccccccccc
    d => ddd

### [edit] See also

emplace_hint (C++11) | constructs elements in-place using a hint (public member function) [edit]
insert | inserts elements (public member function) [edit]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/container/map/emplace&oldid=50553"