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

Tutorial 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 di STL di C++

Manuale di riferimento C++

Metodo e esempio di utilizzo di emplace() in C++ set

Set (Insieme) in STL di C++

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.

Sintassi

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

Parametri

args: Parametri passati per costruire l'elemento da inserire nell'insieme.

Valore di ritorno

La funzione emplace() restituisce un pair<bool, iterator>, che indica se è stato effettuato l'inserimento e restituisce un puntatore all'elemento inserito.

Complesso

Logaritmo della dimensione del contenitore.

Validità degli iteratori

Nessuna modifica.

Conflitto dei dati

Il contenitore è stato modificato.

Nonostante sia sicuro accedere contemporaneamente all'elemento di uscita, non è sicuro iterare attraverso un intervallo di contenitore.

Sicurezza delle eccezioni

Se viene sollevata un'eccezione, la capacità del contenitore non viene modificata.

Esempio 1

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.

Esempio 2

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à.

Esempio 3

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

Esempio 4

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.

Set (Insieme) in STL di C++