std::map::emplace
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.
Parametry
| args | - | argumenty do przekazania do konstruktora elementu |
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.
Wyjątki
Jeśli zostanie wyrzucony wyjątek przez jakąkolwiek operację, ta funkcja nie ma żadnego efektu.
Złożoność
Logarytmiczna względem rozmiaru kontenera.
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
Zobacz także
Szablon:cpp/container/dsc try emplace(C++11) |
tworzy elementy "w miejscu", korzystając z podpowiedzi (publiczna metoda) |
| wstawia elementy (publiczna metoda) |