std::map::emplace(3)
πΈ NAME πΈ
std::map::emplace - std::map::emplace (yes bestie, thatβs the whole NAME section β iconic minimalism β¨).
β¨ Synopsis β¨
okay so hereβs the signature, bestie:
template< class... Args >
std::pair<iterator, bool> emplace( Args&&... args );
since C++11 β weβve been blessed since C++11 π .
So what does it actually do? 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. β¨
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).... And listen: the element may be constructed even if there already is an element with the key in the container, in which case that newly constructed element will be destroyed immediately. π Construction then instant destruction, we hate to see it, but thatβs the rule.
Careful use of emplace allows the new element to be constructed while avoiding unnecessary copy or move operations. Highkey the whole reason to use it, bestie.
No iterators or references are invalidated. Iconic, stable, we love.
π 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. So you get the βwhereβ and the βdid it happenβ in one cute little bundle π.
π¨ Exceptions π¨
If an exception is thrown for any reason, this function has no effect β thatβs the strong exception safety guarantee πͺ. No half-done glow-up, bestie.
β±οΈ Complexity β±οΈ
Logarithmic in the size of the container.
π Example π
// Run this code
#include <iostream>
#include <string>
#include <utility>
#include <map>
int main()
{
std::map<std::string, std::string> m;
// uses pair's move constructor
m.emplace(std::make_pair(std::string("a"), std::string("a")));
// uses pair's converting move constructor
m.emplace(std::make_pair("b", "abcd"));
// uses pair's template constructor
m.emplace("d", "ddd");
// emplace with duplicate key has no effect
m.emplace("d", "DDD");
// uses pair's piecewise constructor
m.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 (const auto& p : m)
std::cout << p.first << " => " << p.second << '\n';
}
β¨ Output β¨
a => a
b => abcd
c => cccccccccc
d => ddd
π See also π
emplace_hintβ constructs elements in-place using a hint (C++11) (public member function).try_emplaceβ inserts in-place if the key does not exist, does nothing if the key exists (C++17) (public member function).insertβ inserts elements or nodes (since C++17) (public member function).
source/version + date check: http://cppreference.com Β· 2024.06.10 Β· page std::map::emplace(3) β thatβs the footer, bestie. byeee π«Άπ
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms