Mapa em C++ Biblioteca de modelos padrão (STL)
⚡ Resumo Inteligente
Mapa em C++ É um contêiner associativo da Biblioteca de Modelos Padrão que armazena elementos como pares chave-valor ordenados, onde cada chave exclusiva corresponde a um valor e permite pesquisa, inserção e percurso ordenado rápidos.

O que é o mapa C++?
In C++Um mapa (MAP) é um contêiner associativo que armazena itens em formato mapeado. Cada item no mapa é composto por um valor-chave e um valor mapeado. Dois valores mapeados não podem compartilhar os mesmos valores-chave.
Os valores-chave são úteis para classificar e identificar elementos de forma única, enquanto os valores mapeados armazenam o conteúdo associado a cada chave. Os dois podem diferir em tipo, mas o tipo de membro os combina em um par que contém ambos.
Antes de escrever qualquer código, é útil saber por que um mapa costuma ser o contêiner mais adequado.
Por que usar std::map?
Eis alguns motivos para usar um mapa:
- std::map armazena apenas chaves únicas, em ordem classificada com base nos critérios de classificação escolhidos.
- É fácil e rápido pesquisar elementos usando a chave.
- Apenas um elemento é anexado a cada chave.
- std::map pode ser usado como um array associativo.
- std::map pode ser implementado usando árvores binárias balanceadas.
Para usufruir desses benefícios, comece pela sintaxe de declaração.
Sintaxe
Para declarar std::map, use esta sintaxe:
std::map<key_datatype, value_datatype>map_name;
- O tipo_de_dados_chave denota o tipo de dados das chaves do mapa.
- O tipo_de_dados_valor denota o tipo de dados dos valores correspondentes às chaves do mapa.
- O nome_do_mapa é o nome do mapa.
Por exemplo:
map<string, int> my_map;
Declaramos um mapa chamado my_map. O mapa terá uma string como tipo de dado da chave e um inteiro como tipo de dado do valor.
Tipos de membros
As funções-membro podem usar os seguintes tipos de membros como parâmetros ou tipo de retorno:
- Tipo de chave: Chave (o primeiro parâmetro no modelo)
- tipo_mapeado: T (o segundo parâmetro no modelo)
- chave_comparar: Compare (o terceiro parâmetro no modelo)
- alocador_type: Alocar (o quarto parâmetro no modelo)
- tipo_valor: par
- valor_comparar: Classe de função aninhada para comparar elementos
- referência: alocador_type::referência
- referência_const: alocador_type::const_reference
- apontador: alocador_type::ponteiro
- ponteiro_const: alocador_type::const_pointer
- iterador: um iterador bidirecional para o value_type
- const_iterador: um iterador bidirecional para const value_type
- iterador_reverso: um iterador reverso
- const_reverse_iterador: um iterador reverso constante
- tipo_diferença: ptrdiff_t
- Tamanho Tipo: tamanho_t
Funções integradas de std::map
std::map vem com funções integradas. Alguns deles incluem:
- begin () – Esta função retorna o iterador para o primeiro item do mapa.
- Tamanho() – Esta função retorna o número de itens em um mapa.
- vazio() – Esta função retorna um valor booleano indicando se um mapa está vazio.
- inserir(par(chave, valor)) – Esta função insere um novo par chave-valor em um mapa.
- encontrar(val) – Esta função fornece o iterador para o elemento val se ele for encontrado. Caso contrário, retorna m.end().
- apagar(posição do iterador) – Esta função exclui o item na posição apontada pelo iterador.
- apagar (const g) – Esta função remove o par chave-valor g de um mapa.
- Claro() – Esta função exclui todos os itens de um mapa.
Com as funções definidas, os exemplos a seguir as colocam em prática, começando com a iteração.
Iterando sobre elementos do mapa
Você pode iterar sobre os elementos do mapa. Basta criar um iterador e usá-lo para isso. Por exemplo:
Exemplo 1
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); cout << "Map size is: " << Students.size() << endl; cout << endl << "Default map Order is: " << endl; for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) { cout << (*it).first << ": " << (*it).second << endl; } }
Saída:
Aqui está uma captura de tela do código:
Code Explicação:
- Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho de string em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho do mapa em nosso código para usar suas funções.
- Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
- Chame a função main(). O { marca o início do corpo da função.
- Crie um mapa chamado Alunos onde as chaves serão números inteiros e os valores serão strings.
- Insira valores no mapa Alunos. Uma chave de 200 e um valor de Alice serão inseridos no mapa.
- Insira valores no mapa Alunos. Uma chave 201 e um valor John serão inseridos no mapa.
- Use a função size() para obter o tamanho do mapa chamado Students. Isso deve retornar 2.
- Imprima algum texto no console.
- Use um loop for para criar um iterador denominado iterar sobre os elementos do mapa denominado Alunos.
- Imprima os valores do mapa Alunos no console.
- Fim do corpo do loop for.
- Fim do corpo da função main().
Inserindo dados em std::map
Você pode inserir itens em um std::map usando a função insert(). Lembre-se de que as chaves do std::map devem ser únicas.
Primeiro, verifica se cada chave está presente no mapa. Se estiver presente, a entrada não será inserida, mas o iterador da entrada existente será retornado. Se não estiver presente, a entrada será inserida.
A função tem as seguintes variações:
- inserir(par) – com essa variação, um par chave-valor é inserido no mapa.
- inserir(itr_inicial, itr_final) – com essa variação, as entradas serão inseridas dentro do intervalo definido por start_itr e end_itr de outro mapa.
A função insert_or_assign() funciona da mesma forma que a função insert(), mas se a chave fornecida já existir no mapa, seu valor será modificado.
Exemplo 2
#include <map> #include <iostream> using namespace std; int main() { map<int, int> m{ {1,3} , {2,4} , {3,5} }; m.insert({ 5, 6 }); m.insert({ 1, 8 }); m.insert_or_assign(1, 6); cout << "Key\tElement\n"; for (auto itr = m.begin(); itr != m.end(); ++itr) { cout << itr->first << '\t' << itr->second << '\n'; } return 0; }
Saída:
Aqui está uma captura de tela do código:
Code Explicação:
- Inclua o arquivo de cabeçalho do mapa em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
- Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
- Chame a função main(). O { marca o início do corpo da função.
- Crie um mapa chamado m onde as chaves serão números inteiros e os valores serão números inteiros. Três entradas foram feitas no mapa.
- Insira uma nova entrada no mapa m. Uma chave 5 e um valor 6 serão inseridos no mapa.
- Tentando fazer uma entrada em uma chave já existente. Como a chave 1 já existe no mapa, o lançamento não será feito.
- Utilizando a função insert_or_assign() para inserir ou modificar uma entrada existente. Como a chave 1 já existe, seu valor será alterado para 6.
- Imprima algum texto no console. O caractere “\t” cria um espaço horizontal enquanto o caractere “\n” move o cursor do mouse para a próxima linha.
- Usar um para laço para criar um iterador denominado itr para iterar sobre os elementos do mapa denominado m.
- Imprima os valores do mapa m no console. O caractere “\t” cria um espaço horizontal entre cada chave e seu valor correspondente. Em contraste, o caractere “\n” move o cursor do mouse para a próxima linha após cada iteração.
- Fim do corpo do loop for.
- O programa deve retornar um valor após a conclusão bem-sucedida.
- Fim do corpo da função main().
Pesquisando em um mapa
Podemos usar a função `find()` para buscar elementos em um mapa por suas chaves. Se a chave não for encontrada, a função retorna `std::map::end`. Caso contrário, um iterador do elemento buscado será retornado.
Exemplo 3
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); std::map<int, string>::iterator it = Students.find(201); if (it != Students.end()) { std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n'; } }
Saída:
Aqui está uma captura de tela do código:
Code Explicação:
- Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções sem obter erros.
- Inclua o arquivo de cabeçalho de string em nosso código para usar suas funções sem obter erros.
- Inclua o arquivo de cabeçalho do mapa em nosso código para usar suas funções sem obter erros.
- Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
- Chame a função main(). O { marca o início do corpo da função main().
- Crie um mapa chamado Alunos cujas chaves serão números inteiros e strings de valores.
- Insira valores no mapa Alunos. Uma chave de 200 e um valor de Alice serão inseridos no mapa.
- Insira valores no mapa Alunos. Uma chave 201 e um valor John serão inseridos no mapa.
- Procure o valor associado a uma chave 201.
- Use uma instrução if para verificar se o valor da chave foi encontrado.
- Imprima o valor da chave junto com algum texto no console.
- Fim do corpo da instrução if.
- Fim do corpo da função main().
Excluindo dados de um mapa
Podemos usar a função erase() para excluir um valor de um mapa. Simplesmente criamos um iterador que aponta para o elemento a ser excluído. O iterador é então passado para a função erase().
Exemplo 4
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<std::string, int> my_map; my_map.insert(std::make_pair("cow", 1)); my_map.insert(std::make_pair("cat", 2)); my_map["lion"] = 3; map<std::string, int>::iterator it = my_map.find("cat"); my_map.erase(it); for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it) cout << (*it).first << ": " << (*it).second << endl; return 0; }
Saída:
Aqui está uma captura de tela do código:
Code Explicação:
- Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho de string em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho do mapa em nosso código para usar suas funções.
- Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
- Chame a função main(). O { marca o início do corpo da função main().
- Crie um mapa chamado my_map cujas chaves serão strings e valores inteiros.
- Insira valores no mapa my_map. Uma chave Cow e um valor 1 serão inseridos no mapa.
- Insira valores no mapa my_map. Uma chave Cat e um valor 2 serão inseridos no mapa.
- Adicione um valor 3 ao mapa my_map com a chave de um leão.
- Crie um iterador para iterar no mapa my_map procurando a chave cat.
- Exclua o elemento apontado pelo iterador.
- Utilize um iterador para percorrer os elementos do mapa `my_map` do início ao fim.
- Imprima o conteúdo do mapa my_map no console.
- O programa deve retornar a saída após a conclusão bem-sucedida.
- Fim do corpo da função main().






