Przestrzenie nazw
Warianty
Działania

std::map::emplace

Z cppreference.com
< cpp‎ | container‎ | map
template< class... Args >
std::pair<iterator,bool> emplace( Args&&... args );
(od C++11)

Wstawia nowy element do kontenera, konstruowany "w miejscu"(ang) z argumentami args przekazanymi do konstruktora , o ile kontener nie zawiera już elementu o identycznym kluczu.

Ostrożne wykorzystanie emplace pozwala uniknąć niepotrzebnych operacji kopiowania/przenoszenia. Konstruktor nowego elementu (tj. std::pair<const Key, T>) jest wywołany z dokładnie tymi samymi argumentami, z którymi zostało wywołane emplace, przekazanymi poprzez std::forward<Args>(args).... Nowy lement może zostać skonstruowany nawet, jeśli w kontenerze istnieje już element o identycznym kluczu. W takim wypadku nowo utworzony element zostanie natychmiast zniszczony.

Żadne iteratory ani referencje nie zostają unieważnione.

Spis treści

[edytuj] Parametry

args - argumenty do przekazania do konstruktora elementu

[edytuj] Zwracana wartość

Zwraca parę składającą się z iteratora na wstawiony element (lub element, który uniemożliwił wstawienie) i wartości bool ustawionej na true, jeśli wstawienie rzeczywiście nastąpiło.

[edytuj] Wyjątki

Jeśli zostanie wyrzucony wyjątek przez jakąkolwiek operację, ta funkcja nie ma żadnego efektu.

[edytuj] Złożoność

Logarytmiczna względem rozmiaru kontenera.

[edytuj] Przykład

#include <iostream>
#include <utility>
#include <string>
#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");
 
    // uses pair's piecewise constructor
    m.emplace(std::piecewise_construct,
              std::forward_as_tuple("c"),
              std::forward_as_tuple(10, 'c'));
    // as of C++17, m.try_emplace("c", 10, 'c'); can be used
 
    for (const auto &p : m) {
        std::cout << p.first << " => " << p.second << '\n';
    }
}

Wynik:

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

[edytuj] Zobacz także

Szablon:cpp/container/dsc try emplace
tworzy elementy "w miejscu", korzystając z podpowiedzi
(publiczna metoda) [edit]
wstawia elementy
(publiczna metoda) [edit]