English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
template<class.... Args> pair<iterator, bool> emplace (Args&&... args); //C++ 11 depois
args: Parâmetros passados para construir o elemento a ser inserido no conjunto.
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.
Logaritmo do tamanho do contêiner.
Nenhuma mudança.
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.
Se uma exceção for lançada, não haverá nenhuma modificação no contêiner.
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.
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.
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
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.