From cppreference.com
template<class...Args>std::pair<iterator,bool>emplace(Args&&...args);(since C++23)Inserts a new element into the container constructed in-place with the given args, if there is no element with the key in the container.
Initializes an object t of type std::pair<key_type,mapped_type> with std::forward<Args>(args)...; if the map already contains an element whose key is equivalent to t.first, *this is unchanged. Otherwise, equivalent to:
autokey_it=ranges::upper_bound(c.keys,t.first,compare);autovalue_it=c.values.begin()+std::distance(c.keys.begin(),key_it);c.keys.insert(key_it,std::move(t.first));c.values.insert(value_it,std::move(t.second));This overload participates in overload resolution only if std::is_constructible_v<std::pair<key_type,mapped_type>,Args...> is true.
Careful use of emplace allows the new element to be constructed while avoiding unnecessary copy or move operations.
Parameters
args - arguments to forward to the constructor of the element Return value
A pair consisting of an iterator to the inserted element (or to the element that prevented the insertion) and a bool value set to true if and only if the insertion took place.
Exceptions
If an exception is thrown for any reason, this function has no effect (
strong exception safety guarantee
).
Complexity
If insertion occurs, linear in the size of the container, otherwise logarithmic in the size of the container
Example
Run this code
#include<iostream>#include<string>#include<utility>#include<flat_map>intmain(){std::flat_map<std::string,std::string>m;// uses pair's move constructorm.emplace(std::make_pair(std::string("a"),std::string("a")));// uses pair's converting move constructorm.emplace(std::make_pair("b","abcd"));// uses pair's template constructorm.emplace("d","ddd");// emplace with duplicate key has no effectm.emplace("d","DDD");// uses pair's piecewise constructorm.emplace(std::piecewise_construct,std::forward_as_tuple("c"),std::forward_as_tuple(10,'c'));// an alternative is: m.try_emplace("c", 10, 'c');for(constauto&p:m)std::cout<<p.first<<" => "<<p.second<<'\n';}Output:
a => a b => abcd c => cccccccccc d => ddd See also
constructs elements in-place using a hint
(public member function)
inserts in-place if the key does not exist, does nothing if the key exists
(public member function)
inserts elements
(public member function)