English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
set C++ emplace_hint()La funzione viene utilizzata per estendere il container set inserendo un nuovo elemento utilizzando un suggerimento come posizione dell'elemento. Gli elementi vengono costruiti direttamente (né copiati né spostati).
Chiamata al costruttore dell'elemento tramite i parametri args passati alla funzione.
Inserisce solo se la chiave non esiste.
template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); //dopo il C++ 11
args: Parametro passato per costruire l'elemento da inserire nella collectione.
position: Indica la posizione di inserimento dell'elemento nuovo.
Restituisce l'iteratore all'elemento inserito. Se l'elemento esiste già, l'inserimento fallisce e l'iteratore viene restituito all'elemento esistente.
Se non viene specificata una posizione, la dimensione del container sarà logaritmica.
Se viene fornita una posizione, la complessità sarà costante.
Nessuna modifica.
Il container è stato modificato.
Nonostante sia sicuro accedere contemporaneamente all'elemento di uscita, non è sicuro iterare attraverso un intervallo di container.
Se viene lanciata un'eccezione, la collectione non viene modificata.
Vediamo un esempio semplice di inserimento di elementi nella collectione:
#include <iostream> #include <set> using namespace std; int main(void) { set<int> m = {60, 20, 30, 40}; m.emplace_hint(m.end(), 50); m.emplace_hint(m.begin(), 10); cout << "La集合 contiene i seguenti elementi" << endl; for (auto it = m.begin(); it != m.end(); ++it){ cout << *it << endl; } return 0; }
Output:
La集合 contiene i seguenti elementi 10 20 30 40 50 60
Nell'esempio sopra, viene semplicemente inserito l'elemento con il valore dato nella posizione data nella集合 m.
Vediamo un esempio semplice:
#include <set> #include <string> #include <iostream> using namespace std; template<typename M> void print(const M& m) { cout << m.size() << " \"elementi: \" << endl; for (const auto& p : m) { cout << p << " \" \"; } cout << endl; } int main() { set<string> m1; //Inserisci alcuni dati di test m1.emplace("Ram"); m1.emplace("Rakesh"); m1.emplace("Sunil"); cout << "Dati iniziali dell'insieme: "; print(m1); cout << endl; //emplace_hint m1.emplace_hint(m1.end(), "Deep"); cout << "set modified, now contains "; print(m1); cout << endl; }
Output:
Dati iniziali dell'insieme: 3 elementi: Rakesh Ram Sunil L'insieme è stato modificato, ora contiene 4 elementi: Deep Rakesh Ram Sunil
Ecco un esempio semplice di inserimento di elementi in una posizione specifica nella collezione:
#include <iostream> #include <set> using namespace std; int main () { set<char> myset; auto it = myset.end(); it = myset.emplace_hint(it, 'b'); myset.emplace_hint(it, 'a'); myset.emplace_hint(myset.end(), 'c'); cout << "myset contains:"; for (auto& x: myset) cout << " [" << x << ']'; cout << '\n'; } return 0; }
Output:
myset contains: [a] [b] [c]
Ecco 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: "; cin >> n; cout << "Inserisci il nome di ogni membro: \n"; for(int i = 0; i < n; i++) { cin >> name; // Ottenere la chiave fmly.emplace_hint(fmly.begin(), name); } cout << "\nIl numero totale dei membri della famiglia è:" << fmly.size(); cout << "\nInformazioni sulla 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: 4 Inserisci il nome di ogni membro: Deep Sonu Ajeet Bob Il numero di membri della famiglia è: 4 Informazioni sulla famiglia: Nome ________________________ Ajeet Bob Deep Sonu
Nell'esempio sopra, inserisce semplicemente gli elementi all'inizio della集合 in base alla scelta dell'utente.