Mapa na biblioteca de modelos padrão C++ (STL) com exemplo de impressão
O que é std::map?
Em C++, um MAP é um contêiner associativo que armazena itens em um formulário mapeado. Cada item no mapa é composto por um valor-chave e um valor mapeado. Dois valores mapeados não podem compartilhar os mesmos valores de chave.
Os valores-chave são bons para classificar e identificar elementos de forma exclusiva. Os valores mapeados são para armazenar o conteúdo associado à chave. Os dois podem diferir em tipos, mas o tipo de membro os combina por meio de um tipo de par que combina ambos.
Neste tutorial de C++, você aprenderá:
- O que é std::map?
- Por que usar std::map?
- Sintaxe:
- Tipos de membros:
- Funções incorporadas
- Iteração sobre elementos do mapa
- Inserindo dados em std::map
- Pesquisando em um mapa
- Exclusão de dados de um mapa
Por que usar std::map?
Aqui estão as razões para usar o mapa:
- std::map armazena chaves exclusivas apenas em ordem de classificação 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 é implementável usando árvores binárias (balanceadas).
Sintaxe:
Para declarar std::map, use esta sintaxe:
std::map<key_datatype, value_datatype>map_name;
- O key_datatype denota o tipo de dados das chaves do mapa.
- O value_datatype denota o tipo de dados dos valores correspondentes às chaves do mapa.
- O map_name é o nome do mapa.
Por exemplo:
map<string, int> my_map;
Declaramos um mapa chamado my_map. O mapa terá uma string como chave tipos de dados e inteiros como valores tipo de dados.
Tipos de membros:
As funções de membro podem usar os seguintes tipos de membros como parâmetros ou tipo de retorno:
- tipo_chave: Chave (o primeiro parâmetro no modelo)
- tipo_mapeado: T (o segundo parâmetro no modelo)
- key_compare: Compare (o terceiro parâmetro no modelo)
- allocator_type: Alocação (o quarto parâmetro no modelo)
- value_type: par
- value_compare: Classe de função aninhada para comparar elementos
- referência: allocator_type::reference
- const_reference: allocator_type::const_reference
- ponteiro: allocator_type::pointer
- const_pointer: allocator_type::const_pointer
- iterador: um iterador bidirecional para o value_type
- const_iterator: um iterador bidirecional para o const value_type
- reverse_iterator: um iterador reverso
- const_reverse_iterator: um iterador reverso constante
- difference_type: ptrdiff_t
- size_type: tamanho_t
Funções incorporadas
std::map vem com funções embutidas. Alguns deles incluem:
- começar()- 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 de valores-chave em um mapa.
- encontrar(val)- Esta função fornece o iterador para o elemento val se ele for encontrado. Caso contrário, retornará 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 exclui o valor-chave g de um mapa.
- Limpar ()- Esta função exclui todos os itens de um mapa.
Iteração sobre elementos do mapa
Você pode iterar sobre os elementos do mapa. Nós simplesmente precisamos 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:
Explicação do código:
- 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 de 201 e um valor de John serão inseridos no mapa.
- Use a função size() para obter o tamanho do mapa chamado Alunos. Isso deve retornar um 2.
- Imprima algum texto no console.
- Use um loop for para criar um iterador nomeado para iterar sobre os elementos do mapa chamados 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 std::map usando a função insert(). Lembre-se de que as chaves std::map devem ser exclusivas.
Então, ele primeiro verifica se cada chave está presente no mapa. Se estiver presente, a entrada não será inserida, mas retornará o iterador da entrada existente. Se não estiver presente, a entrada é inserida.
A função tem as seguintes variações:
- inserir(par)- com essa variação, um par de valores-chave é inserido no mapa.
- inserir(start_itr, end_itr)- com esta variação, as entradas serão inseridas dentro do intervalo definido por start_itr e end_itr de outro mapa.
O inserir_ou_assing() A função 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:
Explicação do código:
- 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 de 5 e um valor de 6 serão inseridos no mapa.
- Tentando fazer uma entrada em uma chave já existente. Como a chave 1 já existe no mapa, a entrada não será feita.
- Usando 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.
- Use um loop for para criar um iterador chamado itr para iterar sobre os elementos do mapa chamado m.
- Imprima os valores do mapa m no console. O caractere “\t” cria um espaço horizontal entre cada chave e seu valor correspondente. Por outro lado, o caractere “\n” move o cursor do mouse para a próxima linha após cada iteração.
- Fim do corpo do for a loop.
- O programa deve retornar o 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 procurar elementos em um mapa por suas chaves. Se a chave não for encontrada, a função retornará std::map::end. Caso contrário, um iterador do elemento pesquisado será retornado.
Exemplo 2:
#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:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções sem 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 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 de 201 e um valor de John serão inseridos no mapa.
- Procure o valor associado a uma chave de 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().
Exclusão de 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 3:
#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:
Explicação do código:
- 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 de Vaca e um valor de 1 serão inseridos no mapa.
- Insira valores no mapa my_map. Uma chave de Cat e um valor de 2 serão inseridos no mapa.
- Adicione um valor 3 no mapa my_map com a chave de um leão.
- Crie um iterador para iterar no mapa my_map procurando o cat-chave.
- Exclua o elemento apontado pelo iterador.
- Use um iterador para iterar sobre 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().
Resumo:
- Um mapa é um contêiner associativo que armazena itens em um formulário mapeado.
- Cada item no mapa tem um valor-chave e um valor mapeado.
- Em um mapa, dois valores mapeados não podem compartilhar valores-chave.
- Os valores-chave ajudam a classificar e identificar elementos de forma exclusiva.
- Os valores mapeados ajudam a armazenar o conteúdo associado à chave.
- O mapa C++ armazena chaves exclusivas em ordem de classificação.
- Para trabalhar com o mapa C++, criamos um iterador para iterar sobre os elementos.
- Com o iterador, podemos realizar tarefas como pesquisar e excluir itens do mapa.
Linguagem C
- C Funções da Biblioteca Padrão
- Operadores em C++ com Exemplo:O que é, Tipos e Programas
- C++ do… while loop com exemplos
- Instrução C++ Switch Case com EXEMPLO
- Alocação dinâmica de matrizes em C++ com exemplo
- Ponteiros C++ com exemplos
- Sobrecarga do operador C++ com exemplos
- std::list em C++ com exemplo
- Funções C++ com exemplos de programas
- Diferença entre estrutura e classe:explicada com exemplo de C++