Condividi tramite


map::emplace

Inserire un elemento costruito in una posizione della mappa (non viene effettuata alcuna operazione di copia o di spostamento).

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

Parametri

Parametro

Descrizione

args

Gli argomenti inoltrati per costruire un elemento da inserire nel mapping a meno che questo già contenga un elemento il cui valore è equivalentemente.

Valore restituito

Una coppia in cui il componente bool è vero se è stato eseguito un inserimento, false se la mappa contiene già un elemento di valore equivalente nell'ordine. Il componente dell'iteratore della coppia di punti di valore restituita all'elemento appena inserito se il componente bool è true, oppure l'elemento esistente se il componente bool è false.

Per accedere al componente iteratore di una pair pr, utilizzare pr.first; per dereferenziarla, utilizzare *pr.first. Per accedere al componente bool, utilizzare pr.second. Per un esempio, vedere il codice di esempio più avanti in questo articolo.

Note

Nessun iteratore o puntatore, viene invalidato da questa funzione.

Durante il collocamento, se viene generata un'eccezione, lo stato del contenitore non viene modificato.

Il value_type di un elemento è una coppia, tale che il valore di un elemento sarà una coppia ordinata con il primo componente uguale al valore della chiave e il secondo uguale al valore del dato dell'elemento.

Esempio

// 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;
}

Output

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

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

Requisiti

Intestazione: <map>

Spazio dei nomi: std

Vedere anche

Riferimenti

<map>

Classe map

Libreria di modelli standard