Partager via


map::emplace

Insère un élément construit en place (aucune opération de copie ou de mouvements n'est exécutée) dans un mappage.

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

Paramètres

Paramètre

Description

args

Les arguments sont transférés pour construire un élément à insérer dans le mappage à moins que celui-ci ne contienne déjà un élément dont la valeur est de façon équivalente classée.

Valeur de retour

Une paire dont le composant bool est vrai si une insertion a été faite, et faux si le mappage contient déjà un élément de valeur équivalente dans la commande. Le composant itérateur des paires de valeurs de retour pointe vers l'élément récemment inséré si le composant bool est vrai, ou vers un élément existant si le composant bool est false.

Pour accéder au composant d'itérateur d'pair pr, utilisez pr.first; pour le déréférencer, utilisez *pr.first. Pour accéder au composant bool, utilisez pr.second. Pour avoir un exemple, consultez l'exemple de code plus loin dans cet article.

Notes

Aucun itérateur ou référence ne sont invalidés par cette fonction.

Pendant la mise en place, si une exception est levée, l'état du conteneur n'est pas modifié.

La value_type d'un élément consiste des paires, afin que la valeur d'un élément soit une paire classée avec comme premier composant la valeur de clé et le second composant égal à la valeur de l'élément.

Exemple

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

Sortie

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

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

Configuration requise

En-tête : <mappage>

Espace de noms : std

Voir aussi

Référence

<map>

map, classe

Bibliothèque STL (Standard Template Library)