std::multimap::emplace

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

template< class... Args >
iterator emplace( Args&&... args );
(since C++11)

Inserts a new element into the container by constructing it in-place with the given args .

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.

Contents

[edit] Parameters

args - arguments to forward to the constructor of the element

[edit] Return value

Returns an iterator to the inserted element.

[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

#include <iostream>
#include <utility>
#include <string>
 
#include <map>
int main()
{
    std::multimap<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

(C++11)
constructs elements in-place using a hint
(public member function)
inserts elements
(public member function)