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_datatype denota o tipo de dados das chaves do mapa.
  • O método da value_datatype denota 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:

Iterando sobre elementos do mapa

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

Iterando sobre elementos do mapa

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. Ligue para o main() função. O { marca o início do corpo da função.
  6. Crie um mapa chamado Alunos onde as chaves serão números inteiros e os valores serão strings.
  7. Insira valores no mapa Alunos. Uma chave de 200 e um valor de Alice serão inseridos no mapa.
  8. Insira valores no mapa Alunos. Uma chave 201 e um valor John serão inseridos no mapa.
  9. Use o size() função 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 iterar sobre os elementos do mapa denominado Alunos.
  12. Imprima os valores do mapa Alunos no console.
  13. Fim do corpo do loop for.
  14. 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:

Inserindo dados em std::map

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

Inserindo dados em std::map

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. Ligue para o main() função. O { marca o início do corpo da função.
  5. 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.
  6. Insira uma nova entrada no mapa m. Uma chave 5 e um valor 6 serão inseridos no mapa.
  7. Tentando fazer uma entrada em uma chave já existente. Como a chave 1 já existe no mapa, o lançamento não será feito.
  8. 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.
  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. Usar um para laço 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 o valor após a conclusão bem-sucedida.
  14. 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:

Pesquisando em um mapa

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

Pesquisando em um mapa

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. Ligue para o main() função. O { marca o início do corpo de main() função.
  6. Crie um mapa chamado Alunos cujas chaves serão números inteiros e strings de valores.
  7. Insira valores no mapa Alunos. Uma chave de 200 e um valor de Alice serão inseridos no mapa.
  8. Insira valores no mapa Alunos. Uma chave 201 e um valor John serão inseridos no mapa.
  9. Procure o valor associado a uma chave 201.
  10. Use uma instrução if para verificar se o valor da chave foi encontrado.
  11. Imprima o valor da chave junto com algum texto no console.
  12. Fim do corpo da instrução if.
  13. 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:

Excluindo dados de um mapa

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

Excluindo dados de um mapa

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. Ligue para o main() função. O { marca o início do corpo do main() função.
  6. Crie um mapa chamado my_map cujas chaves serão strings e valores inteiros.
  7. Insira valores no mapa my_map. Uma chave Cow e um valor 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 ao mapa my_map com a chave de um leão.
  10. Crie um iterador para iterar no mapa my_map procurando a chave cat.
  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 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.

Resuma esta postagem com: