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

C++ Uso e exemplo do emplace() do set

C++ STL Set ( Conjunto )

C ++ set emplace()A função é usada para expandir o conjunto set, inserindo novos elementos. Os elementos são construídos diretamente (não são copiados nem movidos).

Chama o construtor do elemento através dos parâmetros args passados para a função.

A inserção ocorre apenas quando a chave não existe.

Sintaxe

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

Parâmetros

args: Parâmetros passados para construir o elemento a ser inserido no conjunto.

Retorno

A função emplace() retorna um par booleano, que indicará se a inserção ocorreu e retornará um ponteiro para o iterador do elemento recém-inserido.

Complexo

Logaritmo do tamanho do contêiner.

Validade do iterador

Nenhuma mudança.

Concorrência de dados

O contêiner foi modificado.

Embora seja seguro acessar o elemento de saída ao mesmo tempo, não é seguro iterar sobre um intervalo no contêiner.

Segurança de exceção

Se uma exceção for lançada, não haverá nenhuma modificação no contêiner.

Exemplo1

Vamos ver um exemplo simples de inserção de elementos em um conjunto:

#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 << "O conjunto contém os seguintes elementos" << endl;
   for (auto it = m.begin(); it != m.end(); ++it)
      cout << *it << ", ";
   return 0;
}

Saída:

O conjunto contém os seguintes elementos
a, b, c, d, e,

No exemplo acima, ele apenas insere o elemento com o par de valores de chave dados no conjunto m.

Exemplo2

Vamos ver um exemplo simples, inserir elementos e verificar chaves repetidas:

#include <set>  
#include <string>  
#include <iostream>  
  
using namespace std;  
  
template<typename S> void print(const S& s) {  
    cout << s.size() << "  elementos: ";  
  
    for (const auto& p : s) {  
        cout << "( " << p << " ) ";  
    }  
  
    cout << endl;  
}  
  
int main()  
{  
    set<string> s1;  
  
    auto ret = s1.emplace("dez");  
  
    if (!ret.second){  
        cout << "Falha ao emplace, o elemento com valor "dez" já existe.";  
            << endl << "\n\nElementos existentes são (" << *ret.first << ")"  
            << endl;  
        cout << "set não foi modificado" << endl;  
    }  
    else{  
        cout << "A coleção foi modificada e agora contém ";  
        print(s1);  
    }  
    cout << endl;  
  
    ret = s1.emplace("dez");  
  
    if (!ret.second){  
        cout << "Falha ao emplace, o elemento com valor "dez" já existe.";  
            << endl << "\n\nElementos existentes são (" << *ret.first << ")"  
            << endl;  
    }  
    else{  
        cout << "A coleção foi modificada e agora contém ";  
        print(s1);  
    }  
    cout << endl;  
}

Saída:

A coleção foi modificada e agora contém 1 Elemento: (dez)
Falha ao emplace, o elemento com valor "dez" já existe.
  Elementos existentes são (dez)

No exemplo acima, ao inserir elementos na coleção, ao tentar usar a chave "dez" novamente, ele exibirá uma mensagem de erro informando que a chave "dez" já existe.

Exemplo3

Vamos ver um exemplo simples de busca da soma de elementos inseridos:

#include <iostream>
#include <set>
using namespace std;
 
int main()
{
    // Declaração da variável sum
    int sum = 0;
 
    // Declaração de 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);
 
    // Declaração de iterator
    set<int>::iterator it;
 
    // Calcular a soma dos elementos
    while (!myset.empty()) {
        it = myset.begin();
        sum = sum + *it;
        myset.erase(it);
    }
 
    // Imprimir a soma
    cout << "A soma dos elementos é: " << sum;
    return 0;
}

Saída:

A soma dos elementos é: 30

Exemplo4

Vamos ver um exemplo simples de inserção de elementos:

#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
  typedef set<string> cidade;  
   string name;
   cidade fmly;
   int n;
   cout << "\nInsira o número de membros da família: ";
   cin >> n;
   cout << "\nInsira o nome de cada membro:\n";
   for(int i = 0; i < n;++)
   {
       cin >> name;      // Obter chave
       fmly.emplace(name);
       
   }
   
      cout << "\nO número total de membros da família é: " << fmly.size();
      cout << "\nLista de membros da família:\n";
      cout << "\nNome\n\n________________________\n";
      city::iterator p;
      for(p = fmly.begin(); p!=fmly.end(); p++)
      {
          cout << (*p << " \n ";
      }
    
   return 0;
}

Saída:

Insira o número de membros da família: 3
Insira o nome de cada membro: 
Bob
Robin
David
O número total de membros da família é: 3
Lista de Membros da Família: 
Nome 
 ________________________
Bob 
David 
Robin

No exemplo acima, ele apenas insere elementos com base na escolha do usuário.

C++ STL Set ( Conjunto )