Sdílet prostřednictvím


map::emplace

Vloží prvek vytvořený na místě (nejsou provedeny žádné operace kopírování nebo přesunutí) do objektu map.

template<class... Args>
   pair<iterator, bool> emplace(
      Args&&... args);

Parametry

Parametr

Popis

args

Argumenty předané k vytvoření prvku, který má být vložen do objektu map, pokud již neobsahuje prvek, jehož hodnota je ekvivalentně seřazená.

Vrácená hodnota

Objekt pair jehož komponenta bool je true, pokud bylo provedeno vložení, a false, pokud objekt map již obsahuje prvek s ekvivalentní hodnotou v pořadí.Komponenta iterátoru dvojice návratové hodnoty odkazuje na nově vložený prvek, pokud má komponenta bool hodnotu true nebo na existující prvek, pokud má komponenta bool hodnotu false.

Chcete-li přistupovat ke komponentě iterátoru objektu pairpr, použijte pr.first. Chcete-li k němu přistoupit přes ukazatel, použijte *pr.first.Chcete-li přistupovat ke komponentě bool použijte pr.second.Příklad naleznete v ukázce kódu dále v tomto článku.

Poznámky

Touto funkcí nejsou zneplatněny žádné iterátory nebo odkazy.

Pokud je během umístění vyvolána výjimka, není stav kontejneru změněn.

Objekt value_type prvku je objekt pair, takže hodnota prvku bude seřazený pár s první komponentou rovnající se hodnotě klíče a druhou komponentou rovnající se datové hodnotě prvku.

Příklad

// map_emplace.cpp
// compile with: /EHsc
#include <map>
#include <string>
#include <iostream>

using namespace std;

template <typename M> void print(const M& m) {
    cout << m.size() << " elements: ";

    for (const auto& p : m) {
        cout << "(" << p.first << ", " << p.second << ") ";
    }

    cout << endl;
}

int main()
{
    map<int, string> m1;

    auto ret = m1.emplace(10, "ten");

    if (!ret.second){
        auto pr = *ret.first;
        cout << "Emplace failed, element with key 10 already exists."
            << endl << "  The existing element is (" << pr.first << ", " << pr.second << ")"
            << endl;
        cout << "map not modified" << endl;
    }
    else{
        cout << "map modified, now contains ";
        print(m1);
    }
    cout << endl;

    ret = m1.emplace(10, "one zero");

    if (!ret.second){
        auto pr = *ret.first;
        cout << "Emplace failed, element with key 10 already exists."
            << endl << "  The existing element is (" << pr.first << ", " << pr.second << ")"
            << endl;
    }
    else{
        cout << "map modified, now contains ";
        print(m1);
    }
    cout << endl;
}

Výsledek

map modified, now contains 1 elements: (10, ten)

Emplace failed, element with key 10 already exists.
  The existing element is (10, ten)

Požadavky

Hlavička: <map>

Obor názvů: std

Viz také

Referenční dokumentace

<map>

map – třída

Standardní knihovna šablon