Mapeie na Biblioteca de Modelos Padrão C ++ (STL) com Exemplo

Índice:

Anonim

O que é std :: map?

Em C ++, um MAP é um contêiner associativo que armazena itens em uma forma mapeada. Cada item no mapa é composto de um valor-chave e um valor mapeado. Dois valores mapeados não podem compartilhar os mesmos valores-chave.

Os valores-chave são bons para classificar e identificar elementos de maneira única. Os valores mapeados são para armazenar 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 os dois.

Neste tutorial C ++, você aprenderá:

  • O que é std :: map?
  • Por que usar std :: map?
  • Sintaxe:
  • Tipos de membros:
  • Funções integradas
  • Iterando sobre os 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 tecla.
  • Apenas um elemento é anexado a cada chave.
  • std :: map pode ser usado como uma matriz associativa.
  • std :: map é implementável usando árvores binárias (balanceadas).

Sintaxe:

Para declarar std :: map, use esta sintaxe:

std::mapmap_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 my_map;

Declaramos um mapa chamado my_map. O mapa terá uma string como tipos de dados chave e um inteiro como tipo de dados de valores .

Tipos de membros:

As funções de membro podem usar os seguintes tipos de membros como parâmetros ou tipo de retorno:

  • key_type: Key (o primeiro parâmetro no modelo)
  • mapped_type: T (O segundo parâmetro no modelo)
  • key_compare: Compare (o terceiro parâmetro no modelo)
  • alocator_type: Alloc (o quarto parâmetro no modelo)
  • value_type: pair
  • value_compare: classe de função aninhada para comparar elementos
  • referência: alocator_type :: referência
  • const_reference: allocator_type :: const_reference
  • ponteiro: alocator_type :: ponteiro
  • const_pointer: allocator_type :: const_pointer
  • iterador: um iterador bidirecional para o value_type
  • const_iterator: um iterador bidirecional para const value_type
  • reverse_iterator: um iterador reverso
  • const_reverse_iterator: um iterador reverso constante
  • diferença_tipo: ptrdiff_t
  • size_type: size_t

Funções integradas

std :: map vem com funções embutidas. Alguns deles incluem:

  • begin () - Esta função retorna o iterador para o primeiro item do mapa.
  • size () - Esta função retorna o número de itens em um mapa.
  • empty () - Esta função retorna um valor booleano indicando se um mapa está vazio.
  • insert (pair (key, value)) - Esta função insere um novo par de valores-chave em um mapa.
  • find (val) - Esta função fornece o iterador para o elemento val se ele for encontrado. Caso contrário, ele retornará m.end ().
  • Apagar (posição do iterador) - Esta função exclui o item na posição apontada pelo iterador.
  • erase (const g) - Esta função exclui o valor-chave g de um mapa.
  • Clear () - Esta função exclui todos os itens de um mapa.

Iterando sobre os elementos do mapa

Você pode iterar sobre os elementos do mapa. Simplesmente precisamos criar um iterador e usá-lo para isso. Por exemplo:

Exemplo 1:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));cout << "Map size is: " << Students.size() << endl;cout << endl << "Default map Order is: " << endl;for (map::iterator it = Students.begin(); it != Students.end(); ++it) {cout << (*it).first << ": " << (*it).second << endl;}}

Resultado:

Aqui está uma captura de tela do código:

Explicação do código:

  1. Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
  2. Inclua o arquivo de cabeçalho de string em nosso código para usar suas funções.
  3. Inclua o arquivo de cabeçalho do mapa em nosso código para usar suas funções.
  4. Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
  5. Chame a função main (). O {marca o início do corpo da função.
  6. Crie um mapa chamado Students onde as chaves serão inteiros e os valores serão strings.
  7. Insere valores no mapa de Alunos. Uma chave de 200 e um valor de Alice serão inseridos no mapa.
  8. Insere valores no mapa de Alunos. Uma chave de 201 e um valor de John serão inseridos no mapa.
  9. Use a função size () para obter o tamanho do mapa denominado Alunos. Isso deve retornar um 2.
  10. Imprima algum texto no console.
  11. Use um loop for para criar um iterador denominado para iterar sobre os elementos do mapa denominado Students.
  12. Imprime os valores do mapa Alunos no console.
  13. Fim do corpo do loop for.
  14. 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.

Portanto, ele primeiro verifica se cada chave está presente no mapa. Se estiver presente, a entrada não será inserida, mas retorna o iterador da entrada existente. Se não estiver presente, a entrada é inserida.

A função tem as seguintes variações:

  • insert (pair) - com esta variação, um par de valores-chave é inserido no mapa.
  • insert (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.

A função insert_or_assing () funciona da mesma maneira que a função insert (), mas se a chave fornecida já existir no mapa, seu valor será modificado.

Exemplo 2:

#include #include using namespace std;int main() {map 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;}

Resultado:

Aqui está uma captura de tela do código:

Explicação do código:

  1. Inclua o arquivo de cabeçalho do mapa em nosso código para usar suas funções.
  2. Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
  3. Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
  4. Chame a função main (). O {marca o início do corpo da função.
  5. Crie um mapa denominado m onde as chaves serão inteiros e os valores serão inteiros. Três entradas foram feitas no mapa.
  6. Insira uma nova entrada no mapa m. Uma chave de 5 e um valor de 6 serão inseridos no mapa.
  7. Tentando fazer uma entrada em uma chave já existente. Como a chave 1 já existe no mapa, a entrada não será feita.
  8. 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.
  9. 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.
  10. Use um loop for para criar um iterador denominado itr para iterar sobre os elementos do mapa denominado m.
  11. 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.
  12. Fim do corpo do loop for.
  13. O programa deve retornar um valor após a conclusão bem-sucedida.
  14. Fim do corpo da função main ().

Pesquisando em um mapa

Podemos usar a função find () para pesquisar elementos em um mapa por meio de suas teclas. Se a chave não for encontrada, a função retorna std :: map :: end. Caso contrário, um iterador do elemento pesquisado será retornado.

Exemplo 2:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));std::map::iterator it = Students.find(201);if (it != Students.end()) {std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';}}

Resultado:

Aqui está uma captura de tela do código:

Explicação do código:

  1. Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções sem obter erros.
  2. Inclua o arquivo de cabeçalho de string em nosso código para usar suas funções sem obter erros.
  3. Inclua o arquivo de cabeçalho do mapa em nosso código para usar suas funções sem obter erros.
  4. Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
  5. Chame a função main (). O {marca o início do corpo da função main ().
  6. Crie um mapa chamado Alunos cujas chaves serão inteiros e cadeias de valores.
  7. Insere valores no mapa de Alunos. Uma chave de 200 e um valor de Alice serão inseridos no mapa.
  8. Insere valores no mapa de Alunos. Uma chave de 201 e um valor de John serão inseridos no mapa.
  9. Procure o valor associado a uma chave de 201.
  10. Use uma instrução if para verificar se o valor da chave foi encontrado.
  11. Imprima o valor da chave ao lado de algum texto no console.
  12. Fim do corpo da instrução if.
  13. Fim do corpo da função main ().

Exclusão de dados de um mapa

Podemos usar a função erase () para deletar 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 #include #include using namespace std;int main() {map my_map;my_map.insert(std::make_pair("cow", 1));my_map.insert(std::make_pair("cat", 2));my_map["lion"] = 3;map::iterator it = my_map.find("cat");my_map.erase(it);for (map::iterator it = my_map.begin(); it != my_map.end(); ++it)cout << (*it).first << ": " << (*it).second << endl;return 0;}

Resultado:

Aqui está uma captura de tela do código:

Explicação do código:

  1. Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
  2. Inclua o arquivo de cabeçalho de string em nosso código para usar suas funções.
  3. Inclua o arquivo de cabeçalho do mapa em nosso código para usar suas funções.
  4. Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
  5. Chame a função main (). O {marca o início do corpo da função main ().
  6. Crie um mapa denominado my_map cujas chaves serão strings e valores inteiros.
  7. Insira valores no mapa my_map. Uma chave de vaca e um valor de 1 serão inseridos no mapa.
  8. Insira valores no mapa my_map. Uma chave Cat e um valor 2 serão inseridos no mapa.
  9. Adicione um valor 3 no mapa my_map com a chave de um leão.
  10. Crie um iterador para iterar sobre o mapa my_map procurando pelo gato-chave.
  11. Exclua o elemento apontado pelo iterador.
  12. Use um iterador para iterar sobre os elementos do mapa my_map do início ao fim.
  13. Imprima o conteúdo do mapa my_map no console.
  14. O programa deve retornar a saída após a conclusão bem-sucedida.
  15. 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 possui um valor-chave e um valor mapeado.
  • Em um mapa, dois valores mapeados não podem compartilhar valores-chave.
  • Os valores-chave ajudam na classificação e identificação de elementos de forma única.
  • Os valores mapeados ajudam no armazenamento de conteúdo associado à chave.
  • O mapa C ++ armazena chaves exclusivas em ordem classificada.
  • 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.