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

C++ Tutorial Básico

C++ Palavra-chave e identificador

C++ Sentença goto

C++ Retorno de referência

C++ String

C++ Enumeração (enum)

C++ Sobrecarga de operador

C++ Gestão de memória

C++ Template

C++ Fila de prioridade (priority_queue)

C++ Manual de referência

C++ Map ( Container ) do STL

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

Sintaxe

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

Parâmetros

args:forwarda os parâmetros para construir o elemento a ser inserido no map.

O valor retornado

EleRetorna um par booleano, indicando se a inserção ocorreu e retornando um ponteiro para o iterador do elemento inserido.

Exemplo1

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.

Exemplo2

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.

Exemplo3

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.

Exemplo4

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.

C++ Map ( Container ) do STL