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

Manuale di base di C++

Controllo dei flussi C++

Funzioni in C++

Array e stringhe C++

Strutture dati C++

Classi e oggetti C++

Puntatori in C++

Ereditarietà in C++

Tutorial STL di C++

Manuale di riferimento C++

Utilizzo e esempio della funzione C++ map emplace()

map (contenitore) STL in C++

C++ map emplace()La funzione viene utilizzata perInserimentoNuovo elemento per espandere il contenitore della mappa. Gli elementi vengono costruiti direttamente (nessuna copia né spostamento).

Chiamando il costruttore dell'elemento con i parametri passati alla funzione. L'inserimento avviene solo se la chiave non esiste.

Sintassi

template<class...Args>
    pair<iterator, bool> emplace(Args&&... args); // A partire da C++ 11

Parametri

args:Forward per costruire i parametri dell'elemento da inserire nella mappa.

Valore di ritorno

EssoRestituisce un paio booleano che indica se è avvenuto l'inserimento e restituisce un puntatore all'iteratore dell'elemento appena inserito.

Esempio 1

Ecco un esempio semplice di inserimento di elementi in una mappa.

#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 << "La mappa contiene gli elementi seguenti" << endl;
   for (auto it = m.begin(); it != m.end(); ++it)
      cout << it->first << " = " << it->second << endl;
   return 0;
}

Output:

La mappa contiene gli elementi seguenti
a = 1
b = 2
c = 3
d = 4
e = 5

Nell'esempio sopra, è stato semplicemente inserito l'elemento con il valore chiave dato nel contenitore map m.

Esempio 2

Vediamo un esempio semplice, inseriamo l'elemento e controlliamo la chiave duplicata.

#include <map>  
#include <string>  
#include <iostream>  
#include <string>   
using namespace std;  
  
template<typename M> void print(const M& m) {  
    cout << m.size() << " elementi: ";  
  
    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 << "Fallimento di Emplace, l'elemento con la chiave 10 esiste già."  
            << endl << "Gli elementi esistenti sono (" << pr.first << ", " << pr.second << ")"  
            << endl;  
        cout << "Il map non è stato modificato" << endl;  
    }  
    else{  
        cout << "Il map è stato modificato, nuovi elementi \n";  
        print(m1);  
    }  
    cout << endl;  
  
    ret = m1.emplace(10, "one zero");  
  
    if (!ret.second){  
        auto pr = *ret.first;  
        cout << "Fallimento di Emplace, l'elemento con la chiave 10 esiste già."  
            << endl << "Gli elementi esistenti sono (" << pr.first << ", " << pr.second << ")"  
            << endl;  
    }  
    else{  
        cout << "Il map è stato modificato, nuovi elementi";  
        print(m1);  
    }  
    cout << endl;  
}

Output:

Il map è stato modificato, nuovi elementi
3 elementi: (10, ten) (20, twenty) (30, thirty)
Fallimento di Emplace, l'elemento con la chiave 10 esiste già.
Gli elementi esistenti sono (10, ten)

Nell'esempio sopra, l'elemento è stato inserito nel map e quando si tenta di utilizzare la chiave 10, viene visualizzato un messaggio di errore che indica che la chiave 10 esiste già.

Esempio 3

Vediamo un esempio semplice, inseriamo l'elemento nel map passando i parametri del costruttore ai chiavi e ai valori.

#include <iostream>
#include <utility>
#include <string>
 
using namespace std;
 
#include <map>
int main()
{
    map<string, string> m;
 
    //usare il costruttore move di pair
    m.emplace(make_pair(string("a"), string("a")));}
 
    //Inserimento di elementi utilizzando il costruttore di move del pair
    //Inserimento di elementi utilizzando il costruttore di template del pair
 
    m.emplace("d", "ddd");
    //Inserimento di elementi utilizzando il costruttore di pair
 
    //Uso del costruttore di segmentazione del 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';
    }
}

Output:

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

Nell'esempio sopra, gli elementi vengono inseriti nel map passando i parametri del costruttore chiave e valore rispettivamente.

Esempio 4

Lasciate che vediamo un esempio semplice di inserimento di elementi.

#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 << "Inserisci il numero di membri della famiglia: \n"
   cin >> n;
   cout << "Inserisci il nome e l'età di ogni membro: \n";
   for(int i = 0; i < n; i++)
   {
       cin >> name; 
       cin >> age; 
       //fmly[name] = age;
       fmly.emplace(name, age);
       
   }
   
      cout << "\nIl numero totale dei membri della famiglia è:" << fmly.size();
      cout << "\nDettagli della famiglia: \n";
      cout << "\nNome | Età \n ________________________ \n";
      city::iterator p;
      for(p = fmly.begin(); p != fmly.end(); p++)
      {
          cout << (*p).first << " | " << (*p).second << " \n ";
      }
    
   return 0;
}

Output:

Inserisci il numero di membri della famiglia : 3
Inserisci il nome e l'età di ogni membro: 
Ram 42
Sita 37
Laxman 40
Il numero totale dei membri della famiglia è: 3
Dettagli della famiglia: 
Nome    |  Età 
__________________________
Laxman | 40 
Ram      | 42 
Sita       | 37

Negli esempi sopra, viene inserito l'elemento in base alla scelta dell'utente.

map (contenitore) STL in C++