English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C ++ map emplace() função de uso e exemplo mapemplace()A função é usada para inserir elementos no contêiner.Inserção
Chama o construtor do elemento através dos parâmetros args passados para essa função. A inserção ocorre apenas quando a chave não existe. O elemento é construído diretamente (não é copiado nem movido).
template<class...Args> pair<iterator, bool> emplace(Args&&... args); //de C++ 11 Começa
args:forwarda os parâmetros para construir o elemento a ser inserido no map.
EleRetorna um par booleano, indicando se a inserção ocorreu e retornando um ponteiro para o iterador do elemento inserido.
Vamos ver um exemplo simples de inserção de elementos em um map.
#include <iostream> #include <map> using namespace std; int main(void) { map<char, int> m; m.emplace('a', 1); m.emplace('b', 2); m.emplace('c', 3); m.emplace('d', 4); m.emplace('e', 5); cout << "Map contém os seguintes elementos" << endl; for (auto it = m.begin(); it != m.end(); ++it) cout << it->first << " = " << it->second << endl; return 0; }
Saída:
O map contém os seguintes elementos a = 1 b = 2 c = 3 d = 4 e = 5
No exemplo acima, ele apenas insere o elemento com o par de chave valor dado no contêiner map m.
Vamos ver um exemplo simples, inserindo elementos e verificando chaves repetidas.
#include <map> #include <string> #include <iostream> #include <string> using namespace std; template<typename M> void print(const M& m) { cout << m.size() << " elementos: "; for (const auto& p : m) { cout << "( " << p.first << ", " << p.second << ") "; } cout << endl; } int main() { map<int, string> m1; auto ret = m1.emplace(10, "dez"); ret = m1.emplace(20, "vinte"); ret = m1.emplace(30,"trinta"); if (!ret.second){ auto pr = *ret.first; cout << "Falha no emplace, chave10o elemento já existe." << endl << "Os elementos existentes são (" << pr.first << ", " << pr.second << ")" << endl; cout << "O map não foi modificado" << endl; } else{ cout << "O map foi modificado, novo elemento\n"; print(m1); } cout << endl; ret = m1.emplace(10, "um zero"); if (!ret.second){ auto pr = *ret.first; cout << "Falha no emplace, chave10o elemento já existe." << endl << "Os elementos existentes são (" << pr.first << ", " << pr.second << ")" << endl; } else{ cout << "O map foi modificado, o novo elemento"; print(m1); } cout << endl; }
Saída:
O map foi modificado, o novo elemento 3 O elemento é (10, dez) (20, vinte) (30, trinta) Falha no emplace, chave10o elemento já existe. O elemento existente é (10, dez)
No exemplo acima, o elemento foi inserido no map e, quando você tentar usar a mesma chave10ao mesmo tempo, ele exibirá uma mensagem de erro informando a chave10já existe.
Vamos ver um exemplo simples, inserindo elementos no map através de parâmetros de construtor passados para chave e valor.
#include <iostream> #include <utility> #include <string> using namespace std; #include <map> int main() { map<string, string> m; //Uso do construtor de movimentação do pair m.emplace(make_pair(string("a"), string("a"))); //Uso do construtor de movimentação do pair m.emplace(make_pair("b", "abcd")); //Uso do construtor de template do pair m.emplace("d", "ddd"); //Uso da função de construção segmentada do pair m.emplace(piecewise_construct, forward_as_tuple("c"), forward_as_tuple(10, 'c')); for(const auto &p : m) { cout << p.first << " => " << p.second << '\n'; } }
Saída:
a => a b => abcd c => ccccccccc d => ddd
No exemplo acima, os elementos são inseridos no map passando os parâmetros do construtor para a chave e o valor.
Vamos ver um exemplo simples de inserção de elementos.
#include <iostream> #include <map> #include <string> using namespace std; int main() { typedef map<string, int> city; string name; int age; city fmly; int n; cout << "Digite o número de membros da família: "; cin >> n; cout << "Digite o nome e a idade de cada membro: \n"; for(int i = 0; i < n; i++) { cin >> name; cin >> age; //fmly[name] = age; fmly.emplace(name, age); } cout << "\nNúmero total de membros da família: " << fmly.size(); cout << "\nDetalhes dos membros da família: \n"; cout << "\nNome | Idade \n________________________\n"; city::iterator p; for(p = fmly.begin(); p != fmly.end(); p++) { cout << (*p).first << " | " << (*p).second << " \n "; } return 0; }
Saída:
Insira o número de membros da família: 3 Insira o nome e a idade de cada membro: Ram 42 Sita 37 Laxman 40 Número Total de Membros da Família é:3 Detalhes da Família: Nome | Idade __________________________ Laxman | 40 Ram | 42 Sita | 37
No exemplo acima, ele apenas insere elementos com base na escolha do usuário.