Mapa em C++ Biblioteca de modelos padrão (STL)
O que é o mapa C++? Sintaxe
In C++, um MAPA é um contêiner associativo que armazena itens em um 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 bons para classificar e identificar elementos de maneira exclusiva. Os valores mapeados servem 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 ambos.
Por que usar std::map?
Aqui estão as razões para usar o mapa:
- std::map armazena chaves exclusivas apenas na 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 método da
key_datatypedenota o tipo de dados das chaves do mapa. - O método da
value_datatypedenota o tipo de dados dos valores correspondentes às chaves do mapa. - O método da
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-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: Comparar (o terceiro parâmetro no modelo)
- alocador_type: Alloc (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:
- 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 que indica se um mapa está vazio.
- inserir(par(chave, valor)) – Esta função insere um novo par de valores-chave em um mapa.
- encontrar (valor) - 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.
- Claro () -Esta função exclui todos os itens de um mapa.
Iterando sobre elementos do mapa
Você pode iterar sobre os elementos do mapa. Precisamos simplesmente criar um iterador e usá-lo para isso.
Por exemplo:
1 exemplo:
#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.
- Ligue para o
main()função. 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 o
size()função para obter o tamanho do mapa denominado Alunos. Isso deve retornar um 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 do
main()função.
Inserindo dados em std::map
Você pode inserir itens em std::map usando o insert() função. Lembre-se de que as chaves std::map devem ser exclusivas.
Então, primeiro verifica se cada chave está presente no mapa. Se estiver presente, a entrada não será inserida, mas retornará o iterador para a entrada existente. Se não estiver presente, a entrada será inserida.
A função tem as seguintes variações:
- inserir (par) – com esta variação, um par de valores-chave é inserido no mapa.
- inserir(início_itr, fim_itr) – com esta variação, as entradas serão inseridas dentro do intervalo definido por start_itr e end_itr de outro mapa.
O método da inserir_ou_assing() função funciona da mesma maneira que insert() função, mas se a chave fornecida já existir no mapa, seu valor será modificado.
2 exemplo:
#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.
- Ligue para o
main()função. 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.
- Com o
insert_or_assign()função 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 o valor após a conclusão bem-sucedida.
- Fim do corpo do
main()função.
Pesquisando em um mapa
Nós podemos usar o find() função para procurar 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 pesquisado será retornado.
3 exemplo:
#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 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.
- Ligue para o
main()função. O { marca o início do corpo demain()função. - 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 do
main()função.
Excluindo dados de um mapa
Nós podemos usar o erase() função 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 o erase() função.
4 exemplo:
#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.
- Ligue para o
main()função. O { marca o início do corpo domain()função. - 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.
- 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 do
main()função.
Resumo
- Um mapa é um contêiner associativo que armazena itens em um formato 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 exclusiva.
- Os valores mapeados auxiliam no armazenamento do conteúdo associado à chave.
- C++ map armazena chaves exclusivas em ordem de classificação.
- Trabalhar com C++ map, criamos um iterador para iterar sobre os elementos.
- Com o iterador, podemos realizar tarefas como pesquisar e excluir itens do mapa.






