Spec-Zone.ru › C++

std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::emplace

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

Вставляет новый элемент в контейнер, созданный на месте с заданными args.

Аккуратное использование emplace позволяет создать новый элемент, избегая ненужных копирования или перемещения. Конструктор нового элемента (т.е. std::pair<const Key, T>) вызывается с точно такими же аргументами, как и предоставленными для emplace, переданными через std::forward<Args>(args)....


Если после операции новое количество элементов больше старого max_load_factor() * bucket_count(), происходит перехеширование.
Если перехеширование происходит (из-за вставки), все итераторы становятся недействительными. В противном случае (без перехеширования) итераторы не становятся недействительными.

Параметры

args - аргументы для передачи конструктору элемента

Возвращаемое значение

Возвращает итератор на вставленный элемент.

Исключения

Если возникает исключение по любой причине, эта функция не оказывает никакого эффекта (гарантия сильной безопасности исключений).

Сложность

Амортизированная константа в среднем, в худшем случае линейная относительно размера контейнера.

Пример

#include <iostream>
#include <string>
#include <unordered_map>
#include <utility>
 
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");
 
    // 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';
}

Возможный вывод:

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

См. также

emplace_hint
создает элементы на месте с использованием подсказки
(публичный член-функция)
try_emplace
вставляет на месте, если ключ не существует, ничего не делает, если ключ существует
(публичный член-функция)
insert
вставляет элементы или узлы(since C++17)
(публичный член-функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/unordered_multimap/emplace

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API