English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Tutoriel de base

C++ Contrôle de flux

C++ Fonction

C++ Tableau & Chaîne

C++ Structure de données

C++ Classe & Objet

C++ Pointeur

C++ Héritage

C++ Tutoriel STL

C++ Manuel de référence

C++ Utilisation et exemple de la fonction map emplace()

C++ STL map (conteneur)

C ++ map emplace()La fonction est utilisée pour insérer des éléments dans le conteneurInsertionNouvel élément pour étendre le conteneur de map. Les éléments sont directement construits (ni copiés ni déplacés).

En appelant le constructeur de l'élément en passant les paramètres args à cette fonction. Seulement insérer lorsque la clé n'existe pas.

Syntaxe

template<class...Args>
    pair<iterator, bool> emplace(Args&&... args);    //à partir de C++ 11 Commencer

Paramètres

args: Transmet pour construire les paramètres de l'élément à insérer dans le map.

Retourne la valeur

IlRetourne un booléen pair, indiquant si l'insertion s'est produite et renvoie un pointeur vers l'itérateur de l'élément inséré.

Exemple1

Laissez-nous voir un exemple simple d'insertion d'éléments dans un map.

#include <iostream>
#include <map>
using namespace std;
int main(void) {
   
   map<char, int> m;
   m.emplace('a', 1);
   m.emplace('b', 2);
   m.emplace('c', 3);
   m.emplace('d', 4);
   m.emplace('e', 5);
   cout << "Map contient les éléments suivants" << endl;
   for (auto it = m.begin(); it != m.end(); ++it)
      cout << it->first << " = " << it->second << endl;
   return 0;
}

Sortie :

La map contient les éléments suivants
a = 1
b = 2
c = 3
d = 4
e = 5

Dans l'exemple ci-dessus, il insère simplement l'élément avec la paire de clé-valeur donnée dans le conteneur de map m.

Exemple2

Laisons voir un exemple simple, insérer des éléments et vérifier les clés répétées.

#include <map>  
#include <string>  
#include <iostream>  
#include <string>   
using namespace std;  
  
template<typename M> void print(const M& m) {  
    cout << m.size() << " élément: ";  
  
    for (const auto& p : m) {  
        cout << "( " << p.first << ", " << p.second << ") ";  
    }  
  
    cout << endl;  
}  
  
int main()  
{  
    map<int, string> m1;  
  
    auto ret = m1.emplace(10, "ten");
    ret = m1.emplace(20, "twenty");
    ret = m1.emplace(30, "thirty");
  
    if (!ret.second){  
        auto pr = *ret.first;  
        cout << "Échec de l'emplace, clé10L'élément de la clé existe déjà."  
            << endl << "Les éléments existants sont (" << pr.first << ", " << pr.second << ")"  
            << endl;  
        cout << "map n'a pas été modifiée" << endl;  
    }  
    else{  
        cout << "map a été modifiée, nouveau\n";  
        print(m1);  
    }  
    cout << endl;  
  
    ret = m1.emplace(10, "one zero");  
  
    if (!ret.second){  
        auto pr = *ret.first;  
        cout << "Échec de l'emplace, clé10L'élément de la clé existe déjà."  
            << endl << "Les éléments existants sont (" << pr.first << ", " << pr.second << ")"  
            << endl;  
    }  
    else{  
        cout << "map a été modifiée, le nouveau";  
        print(m1);  
    }  
    cout << endl;  
}

Sortie :

La map a été modifiée, le nouveau
3 Élément: (10, ten) (20, twenty) (30, thirty)
Échec de l'emplace, clé10L'élément de la clé existe déjà.
Les éléments existants sont (10, ten)

Dans l'exemple ci-dessus, l'élément a été inséré dans la map et lorsque vous essayez d'utiliser la même clé10Lorsque cela se produit, il affichera un message d'erreur indiquant que la clé10Déjà existant.

Exemple3

Laisons voir un exemple simple, insérer des éléments dans la map en passant les paramètres du constructeur aux clés et aux valeurs.

#include <iostream>
#include <utility>
#include <string>
 
using namespace std;
 
#include <map>
int main()
{
    map<string, string> m;
 
    //Utilisation du constructeur move de pair
    m.emplace(make_pair(string("a"), string("a")));
 
    //Utilisation du constructeur de conversion move de pair
    m.emplace(make_pair("b", "abcd"));
 
    //Utilisation du constructeur de template de pair
    m.emplace("d", "ddd");
 
    //Utilisation du constructeur de segmentation de pair
    m.emplace(piecewise_construct,
              forward_as_tuple("c"),
              forward_as_tuple(10, 'c'));
 
    for (const auto &p : m) {
        cout << p.first << " => " << p.second << '\n';
    }
}

Sortie :

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

Dans l'exemple ci-dessus, l'élément est inséré dans la map en passant les paramètres du constructeur aux mots-clés et aux valeurs respectivement.

Exemple4

Laissez-nous voir un exemple simple d'insertion d'éléments.

#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
  typedef map<string, int> city;  
   string name;
   int age;
   city fmly;
   int n;
   cout << "Entrez le nombre de membres de la famille : ";
   cin >> n;
   cout << "Entrez le nom et l'âge de chaque membre: \n";
   for(int i = 0; i < n; i++)
   {
       cin >> name; 
       cin >> age; 
       //fmly[name] = age;
       fmly.emplace(name, age);
       
   }
   
      cout << "\nNombre total de membres de la famille : " << fmly.size();
      cout << "\nDétails des membres de la famille: \n";
      cout << "\nNom | Âge \n __________________________\n";
      city::iterator p;
      for(p = fmly.begin(); p != fmly.end(); p++)
      {
          cout << (*p).first << " | " << (*p).second << " \n ";
      }
    
   return 0;
}

Sortie :

Entrez le nombre de membres de la famille: 3
Entrez le nom et l'âge de chaque membre: 
Ram 42
Sita 37
Laxman 40
Le nombre total de membres de la famille est:3
Détails des membres de la famille: 
Nom  |  Âge 
__________________________
Laxman | 40 
Ram  | 42 
Sita  | 37

Dans l'exemple ci-dessus, il insère simplement des éléments en fonction du choix de l'utilisateur.

C++ STL map (conteneur)