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

Corso di base C++

Controllo di flusso C++

Funzione in C++

Array e stringhe C++

Strutture dati C++

Classi e oggetti C++

Puntatore in C++

Ereditarietà in C++

Corso STL in C++

Manuale di riferimento C++

Metodo e esempio di utilizzo di emplace_hint() per set C++

Set (insieme) STL in C++

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.

Sintassi

template<class... Args>
    iterator emplace_hint(const_iterator position, Args&&... args); //dopo il C++ 11

Parametri

args: Parametro passato per costruire l'elemento da inserire nella collectione.

position: Indica la posizione di inserimento dell'elemento nuovo.

Valore di ritorno

Restituisce l'iteratore all'elemento inserito. Se l'elemento esiste già, l'inserimento fallisce e l'iteratore viene restituito all'elemento esistente.

Complessità

Se non viene specificata una posizione, la dimensione del container sarà logaritmica.

Se viene fornita una posizione, la complessità sarà costante.

Validità degli iteratori

Nessuna modifica.

Conflitto dei dati

Il container è stato modificato.

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

Sicurezza delle eccezioni

Se viene lanciata un'eccezione, la collectione non viene modificata.

Esempio 1

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.

Esempio 2

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

Esempio 3

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]

Esempio 4

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.

Set (insieme) STL in C++