English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
template<class...Args> pair<iterator, bool> emplace(Args&&... args); // A partire da C++ 11
args:Forward per costruire i parametri dell'elemento da inserire nella mappa.
EssoRestituisce un paio booleano che indica se è avvenuto l'inserimento e restituisce un puntatore all'iteratore dell'elemento appena inserito.
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.
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à.
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.
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.