std::unorde...ap::emplace(3)
π NAME π
std::unordered_multimap::emplace β the one and only std::unordered_multimap::emplace, straight from the C++ Standard Libary manual. bestie, this is the in-place insert era π
β¨ Synopsis β¨
okay so here's the signature, no cap:
template< class... Args > (since C++11)
iterator emplace( Args&&... args );
Inserts a new element into the container constructed in-place with the given args. π«Ά
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).... literally forwarding the vibes β¨
Careful use of emplace allows the new element to be constructed while avoiding unnecessary copy or move operations. iconic behavior, honestly π
If after the operation the new number of elements is greater than old max_load_factor() * bucket_count() a rehashing takes place. If rehashing occurs (due to the insertion), all iterators are invalidated. Otherwise (no rehashing), iterators are not invalidated. so yeah, mind your iterators bestie π
πΈ Parameters πΈ
argsβ arguments to forward to the constructor of the element. π
π¦ Return value π¦
An iterator to the inserted element. slay. β¨
π Exceptions π
If an exception is thrown for any reason, this function has no effect β that's the strong exception safety guarantee, bestie. π«Ά
π₯ Complexity π₯
Amortized constant on average, worst case linear in the size of the container. π
π Example π
// Run this code
#include <iostream>
#include <string>
#include <utility>
#include <unordered_map>
int main()
{
std::unordered_multimap<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
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'));
for (const auto& p : m)
std::cout << p.first << " => " << p.second << '\n';
}
Possible output:
a => a
b => abcd
c => cccccccccc
d => ddd
d => DDD
π See also π
emplace_hintβ constructs elements in-place using a hint (public member function). πtry_emplaceβ inserts in-place if the key does not exist, does nothing if the key exists (public member function). β¨insertβ inserts elements or nodes (since C++17) (public member function). π
mwah π β source: cppreference.com, date: 2024.06.10. go be iconic, bestie π«Ά
π¦ 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