English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C ++ set emplace()La funzione serve per espandere il contenitore set inserendo un nuovo elemento. L'elemento viene costruito direttamente (senza copiare né spostare).
Esegue il costruttore dell'elemento passando come argomento al funzione i parametri args.
Inserisci solo quando la chiave non esiste.
template<class... Args> pair<iterator, bool> emplace(Args&&... args); // Dopo il C++ 11
args: Parametri passati per costruire l'elemento da inserire nell'insieme.
La funzione emplace() restituisce un pair<bool, iterator>, che indica se è stato effettuato l'inserimento e restituisce un puntatore all'elemento inserito.
Logaritmo della dimensione del contenitore.
Nessuna modifica.
Il contenitore è stato modificato.
Nonostante sia sicuro accedere contemporaneamente all'elemento di uscita, non è sicuro iterare attraverso un intervallo di contenitore.
Se viene sollevata un'eccezione, la capacità del contenitore non viene modificata.
Diamo un'occhiata a un esempio semplice di inserimento di elementi in un insieme:
#include <iostream> #include <set> using namespace std; int main(void) { set<char> m; m.emplace('a'); m.emplace('b'); m.emplace('c'); m.emplace('d'); m.emplace('e'); cout << "L'insieme contiene i seguenti elementi" << fine; for (auto it = m.begin(); it != m.end(); ++it) cout << *it << ", "; return 0; }
Output:
L'insieme contiene i seguenti elementi a, b, c, d, e,
Nell'esempio sopra, ha semplicemente inserito l'elemento con il valore chiave dato nell'insieme m.
Diamo un'occhiata a un esempio semplice, inserimento di elementi e controllo delle chiavi duplicate:
#include <set> #include <string> #include <iostream> using namespace std; template<typename S> void print(const S& s) { cout << s.size() << " elementi: "; for (const auto& p : s) { cout << "( " << p << " ) "; } cout << endl; } int main() { set<string> s1; auto ret = s1.emplace("ten"); if (!ret.second){ cout << "Fallimento dell'emplace, l'elemento con valore "ten" esiste già."; << fine << " Gli elementi attualmente presenti sono (" << *ret.first << ")" << fine; cout << "L'insieme non è stato modificato" << fine; } else{ cout << "La集合 è stata modificata, ora contiene \";" print(s1); } cout << endl; ret = s1.emplace("ten"); if (!ret.second){ cout << "Fallimento dell'emplace, l'elemento con valore "ten" esiste già."; << fine << " Gli elementi attualmente presenti sono (" << *ret.first << ")" << fine; } else{ cout << "La集合 è stata modificata, ora contiene \";" print(s1); } cout << endl; }
Output:
La集合 è stata modificata e ora contiene 1 elemento: (dieci) Fallimento dell'emplace, l'elemento con valore "dieci" esiste già. Gli elementi esistenti sono: (dieci)
Nell'esempio precedente, dopo aver inserito gli elementi nella集合, quando tenti di utilizzare la chiave "dieci", verrà visualizzato un messaggio di errore che indica che la chiave "dieci" esiste già.
Vediamo un esempio semplice di ricerca della somma degli elementi inseriti:
#include <iostream> #include <set> using namespace std; int main() { // Dichiarazione variabile sum int sum = 0; // Dichiarazione set set<int> myset{}; myset.emplace(1); myset.emplace(7); myset.emplace(4); myset.emplace(8); myset.emplace(2); myset.emplace(5); myset.emplace(3); // Dichiarazione iterator set<int>::iterator it; // Calcolo della somma degli elementi while (!myset.empty()) { it = myset.begin(); sum = sum + *it; myset.erase(it); } // Stampa della somma cout << "La somma degli elementi è: " << sum; return 0; }
Output:
La somma degli elementi è: 30
Vediamo un esempio semplice di inserimento di elementi:
#include <iostream> #include <set> #include <string> using namespace std; int main() { typedef set<string> city; string name; city fmly; int n; cout << "Inserisci il numero di membri della famiglia: \n"; cin >> n; cout << "Inserisci il nome di ogni membro: \n"; for(int i = 0; i < n; i++) { cin >> name; // Ottenere la chiave fmly.emplace(name); } cout << "\nIl numero totale dei membri della famiglia è: " << fmly.size(); cout << "\nElenco dei membri della famiglia: \n"; cout << "\nNome\n________________________\n"; city::iterator p; for(p = fmly.begin(); p != fmly.end(); p++) { cout << (*p) << " \n "; } return 0; }
Output:
Inserisci il numero di membri della famiglia: 3 Inserisci il nome di ogni membro: Bob Robin David Il numero totale dei membri della famiglia è: 3 Elenco dei membri della famiglia: Nome ________________________ Bob David Robin
Nell'esempio sopra, viene semplicemente inserito un elemento in base alla scelta dell'utente.