Funções de mapa C ++

Funções de mapa C ++
“Os mapas são recipientes associativos que são usados ​​para armazenar objetos de maneira mapeada. Cada chave em um par de valores-chave que contém todos os componentes de um mapa é distinto. As chaves são usadas para pedidos, mas cada chave tem um conjunto de valores relacionados. Os dados podem ser adicionados e removidos quando necessário. Na linguagem de programação C ++, os mapas mantêm itens criados combinando um valor -chave e um valor definido.

Para dois propósitos primários, os programadores C ++ podem achar a estrutura do mapa útil. Primeiro, por uso da chave, um mapa permite acessibilidade rápida e fácil ao valor. Criar qualquer tipo de índice ou ponteiro pode se beneficiar desse atributo. Uma chave deve ser única em toda a estrutura de dados integrados, que o mapa fornece para fazer. Isso impede a duplicação de dados; Portanto, é outro benefício de usar o mapa.

Por exemplo, se você está criando um aplicativo de negociação e precisar manter os valores dos ativos por sinal de ticker, um mapa é uma abordagem útil devido a esses dois benefícios. Um mapa seria um método eficiente para fornecer e verificar o clima existente em muitas cidades de todo o mundo se estivéssemos desenvolvendo um aplicativo climático. Provavelmente usaremos um mapa em um mercado on -line para localizar produtos por marcas ou categorias.”

Quando evitar o uso de um mapa C ++?

C++'s map function is suitable for efficiently locating values ​​by key. Mas encontrar elementos do mapa pelo uso de um número inteiro envolve atravessar o mapa completo uma vez. A iteração através de um mapa pode se tornar demorada à medida que um mapa cresce em tamanho se quisermos poder localizar valores nele. Um mapa bidirecional é fornecido pelo módulo Boost, o que o torna mais eficaz quando buscamos os dados com frequência. Como o módulo C ++ padrão não contém esse modelo de dados, o usuário deve adquirir a biblioteca Boost em todos os computadores em que o programa é executado ou integrar o pacote Boost como parte da ligação estática.

Um mapa pode não ser a melhor estrutura a ser empregada se percebermos que precisamos encontrar um mapa por elemento em uma aplicação direta. Use uma matriz C ++, buffer, pilha ou qualquer outro tipo de dados que possa tornar o aplicativo mais fácil de entender e mais eficaz.

Vamos discutir o funcionamento das funções do mapa em C++.

Exemplo nº 1

Executaremos o código nesta instância para mostrar como implementar funções de mapa. Podemos iterar os componentes do mapa. Para fazer isso, precisamos apenas construir um iterador e depois utilizá -lo.

#incluir
#incluir
#incluir
usando namespace std;
int main ()

mapa Tarefa 1;
Tarefa 1.Insira (par(2, 60));
Tarefa 1.Insira (par(4, 80));
Tarefa 1.Insira (par(6, 70));
Tarefa 1.Insira (par(8, 90));
Tarefa 1.Insira (par(10, 50));
Tarefa 1.Insira (par(12, 80));
atribuição1 [14] = 40;
mapa:: iterator itr;
cout << "\nThe map of the assignment1 is : \n";
cout << "\tKEY\tELEMENT\n";
para (ITR = atribuição1.começar(); itr != atribuição1.fim(); ++ itr)
cout << '\t' << itr->primeiro << '\t' << itr->segundo
<< '\n';

cout << endl;
mapa atribuição2 (atribuição1.BEGIN (), atribuição1.fim());
cout << "\nThe map of the assignment2 after"
<< " assign from assignment1 is : \n";
cout << "\tKEY\tELEMENT\n";
para (ITR = atribuição2.começar(); itr != atribuição2.fim(); ++ itr)
cout << '\t' << itr->primeiro << '\t' << itr->segundo
<< '\n';

cout << endl;

Aqui vamos integrar os arquivos de cabeçalho necessários. e no início do código. Agora invocamos a função principal (). Vamos utilizar o comando do mapa. Dentro deste comando, inicializamos dois números inteiros. Agora temos que inserir diferentes valores aleatórios de elementos. Então, estamos usando a função insert ().

O argumento do "par" terá dois números inteiros. Especificamos os valores de 6 tarefas diferentes. Agora temos que utilizar outro método de introdução do valor em um mapa. Em seguida, imprimiremos a atribuição do mapa usando o comando mapa. Junto com isso, usamos um iterador. A declaração "cout" está sendo usada para imprimir a linha. Em seguida, a declaração "cout" será usada para mostrar as chaves e elementos. Então fazemos um incremento no valor de "ITR". Em seguida, usaremos a declaração "cout". Criamos um ponteiro que aponta para o iterador. Usaremos o termo 'endl' para fazer codificação na próxima linha.

Agora vamos atribuir os itens da atribuição1 à atribuição2. Vamos novamente usar o comando mapa. Junto com isso, estamos utilizando a atribuição de função Begin () e End (). Essas funções são usadas para iniciar e encerrar os valores da atribuição1. Agora vamos demonstrar todos os elementos do mapa necessário. A declaração “cout” será aplicada para imprimir a linha “O mapa da atribuição2 após o design da atribuição1 é”. Então "cout" é usado para mostrar as chaves e elementos.

Mais uma vez, aplicamos o loop "para". Temos que satisfazer a condição. Então fazemos um incremento no iterador. Vamos construir o ponteiro do primeiro e segundo elementos da atribuição1. Para iniciar o código da nova linha, usamos "endl". Agora, removeremos todos os itens até o elemento que tem o valor da tecla “3” na atribuição1.

cout << "\nassignment2 after eliminating the "
"Elementos com o valor chave inferior a 3: \ n";
cout << "\tKEY\tELEMENT\n";
atribuição2.Apagar (atribuição2.BEGIN (), atribuição2.encontre (3));
para (ITR = atribuição2.começar(); itr != atribuição2.fim(); ++ itr)
cout << '\t' << itr->primeiro << '\t' << itr->segundo
<< '\n';

int n;
n = atribuição2.apagar (4);
cout << "\nassignment2.erase(4) : ";
cout << n << " removed \n";
cout << "\tKEY\tELEMENT\n";
para (ITR = atribuição2.começar(); itr != atribuição2.fim(); ++ itr)
cout << '\t' << itr->primeiro << '\t' << itr->segundo
<< '\n';

cout << endl;
cout << "assignment1.lower_bound(10) : "
<< "\tKEY = ";
cout << assignment1.lower_bound(10)->primeiro << '\t';
cout << "\tELEMENT = " << assignment1.lower_bound(10)->segundo
<< endl;
cout << "assignment1.upper_bound(10) : "
<< "\tKEY = ";
cout << assignment1.upper_bound(10)->primeiro << '\t';
cout << "\tELEMENT = " << assig>nMent1.Upper_bound (10)-> Segundo
<< endl;
retornar 0;

A declaração "cout" está sendo empregada para imprimir a declaração "atribuição2 depois de eliminar os elementos com o valor da chave menor que 3". A declaração "cout" também imprime as chaves e seus valores. Aplicamos a função EASE (). Aqui estamos usando o método Begin (). Devido a esta função, inicia os valores -chave da atribuição2. Então temos que utilizar o método find () para adquirir o elemento no mapa. Usamos a função BEGIN () e END (), que está associada ao iterador. Em seguida, construímos o ponteiro do primeiro e o segundo elemento do iterador e usamos a declaração "cout" para imprimir esses valores.

Agora queremos eliminar o elemento que tem o valor da chave 4. Ao fazer isso, temos que inicializar a variável "n". O tipo de dados dessa variável é um número inteiro. Então estaremos usando a função EASE (). Esta função contém o parâmetro do valor que queremos ser removido. A declaração "cout" será usada para excluir esse elemento. Mais uma vez, estamos usando o loop "for" e o ponteiro do iterador. Imprimiremos o limite inferior e o limite superior do mapa para atribuição1 usando a instrução "cout".

Na próxima linha, utilizaremos a declaração "cout" para criar um ponteiro que aponte para o segundo valor da atribuição1. Também entramos na palavra -chave "endl" para ir para a próxima linha para codificar. Agora o método de atribuição superior_bound () será chamado. O ponteiro será criado para apontar para o segundo valor do limite superior da atribuição1.

Exemplo nº 2

Nesta ilustração, o valor da chave e o valor vinculado à chave têm diferentes tipos de dados. Não é possível configurar os valores um de cada vez; Eles devem ser fornecidos em pares.

#incluir
#incluir
#incluir
#incluir
usando namespace std;
int main ()

mapa Trabalhadores;
Trabalhadores [221] = "anikaa";
Trabalhadores [320] = "Zeeshan";
Trabalhadores [345] = "Daniyal";
Trabalhadores [237] = "Dania";
Trabalhadores [189] = "Azka";
cout << "Workers[190]=" << Workers[237] << endl << endl;
cout << "Size of the map: " << Workers.size() << endl;
cout << endl << "The Original Order:" << endl;
para (map :: iterator jj = trabalhadores.começar(); JJ!= Trabalhadores.fim(); ++ jj)

cout << (*jj).first << ": " << (*jj).second << endl;

cout << endl << "The Inverse Order:" << endl;
para (map :: reverse_iterator jj = trabalhadores.rBegin (); JJ!= Trabalhadores.rend (); ++ jj)

cout << (*jj).first << ": " << (*jj).second << endl;

No início do programa, incluiremos quatro bibliotecas importantes, que incluem ,, e . Afinal, o espaço para nome padrão será usado como std. Construímos o mapa dos trabalhadores. Forneceremos dois tipos de dados como argumentos do mapa. O tipo de dados inclui número inteiro e string. Agora vamos atribuir os IDs aos trabalhadores, respectivamente. Utilizamos o formato do índice de matriz para alocar os valores. A declaração "cout" está sendo usada para mostrar o nome do trabalhador cujo id é 190.

Além disso, estamos usando a declaração "cout" para exibir o tamanho do mapa. O tamanho será impresso após a declaração “tamanho do mapa”. Em seguida, a declaração "cout" será usada para exibir a ordem original dos IDs. Dentro do loop, usaremos o comando "mapa". Inicializamos a string e o iterador. Em seguida, iniciamos o mapa dos trabalhadores usando o método Begin (). Para encerrar o mapa dos trabalhadores, usamos a função final ().

Na última parte do loop "for", aumentamos o valor do iterador. A declaração "cout" será usada para mostrar os elementos do mapa. Em seguida, usaremos novamente a declaração "cout" para mostrar a linha "a ordem inversa". Utilizaremos o método BEGIN () e END () para iniciar e encerrar os elementos do mapa. Vamos iterar os elementos até que a condição seja cumprida. No final, a declaração "cout" é usada para imprimir os elementos de maneira inversa.

Exemplo no 3

Algumas das funções do mapa são usadas no programa seguinte. Antes de iterar para esse valor que corresponda a uma chave específica, ele adiciona inicialmente outros itens ao mapa.

#incluir
#incluir
#incluir
#incluir
usando namespace std;
int main ()

mapa Std;
Std.inserir (std :: par(736, "Jamil"));
Std.inserir (std :: par(233, "dua"));
Std.inserir (std :: par(837, "Aima"));
Std [348] = "snobar";
Std [646] = "tania";
cout << "Map Size: " << Std.size() << endl << endl;
cout << endl << "Real order of the values:" << endl;
para (map :: iterator iter = std.começar(); iter!= Std.fim(); ++ iter)

cout << (*iter).first << ": " << (*iter).second << endl;

std :: mapa:: iterator it = std.encontre (348);
Se isso != Std.fim())
std :: cout < " << Std.find(348)->segundo << '\n';

Primeiro de tudo, incorporaremos os arquivos de cabeçalho. O arquivo de cabeçalho lida com as seqüências de strings no código. O arquivo de cabeçalho lida com as funcionalidades de entrada e saída. O arquivo de cabeçalho lida com o mapa. E o último arquivo de cabeçalho lida com as funcionalidades da utilidade. Vamos começar a codificação no corpo da função principal () 0f. Vamos executar o comando "mapa". Com a ajuda disso, inicializaremos um mapa pelas chaves e seus valores apropriados. O tipo de dados das teclas é um número inteiro e o tipo de dados de seus valores é "string".

Agora vamos inserir as marcas e os nomes dos alunos no mapa com a ajuda da função insert (). Usamos esta função para adicionar os dados dos três alunos. Em seguida, usaremos o formato do índice de matriz para inserir as marcas e nomes dos alunos. Os dados de dois alunos serão inseridos usando o formato do índice de matriz.

Além disso, aplicaremos o método "cout". A declaração "cout" exibe a linha "tamanho do mapa" na tela antes do mapa. Dentro desta declaração "cout", usaremos o método size (). Agora mostraremos os nomes e os números dos alunos no formato original. A declaração "cout" está sendo usada para imprimir o texto "Ordem real dos valores". Utilizamos o comando "endl" em ambos os lados deste texto para imprimir este texto em uma linha separada. Agora estamos usando o loop "for". Também utilizaremos a função Begin () para começar a imprimir o primeiro nome e as marcas do aluno em um mapa.

Da mesma forma, o método end () está sendo usado para mostrar o sobrenome do aluno em um mapa. A declaração "cout" mostrará esses primeiros e últimos valores. No final do programa, usaremos outra função de mapa para encontrar (). Queremos descobrir o nome do aluno, cujo número é 348. Então, vamos chamar o método find (). Usamos std :: map e std :: iterator. Então estamos usando a condição "se". Aplicamos a função final () mapa para cumprir a condição "se". Para imprimir o nome do aluno cujas notas são 348, empregaremos o método STD :: Cout. Também criamos o ponteiro, que aponta para o segundo valor do mapa.

Conclusão

Discutimos um mapa C ++ e como utilizar as funções do mapa neste artigo. Demonstramos brevemente a adição de itens e recuperando -os pelo uso do mapa em diferentes exemplos. Os mapas são o componente da biblioteca de modelos padrão. Os mapas são receptáculos associativos que contêm pares de valor-chave ordenados; Quase todas as teclas são distintas e só podem ser adicionadas ou completamente removidas. Os valores -chave podem ter seus valores relacionados que serão modificados. Em um mapa, os valores definidos mantêm os dados relacionados à chave, enquanto os valores -chave são normalmente utilizados para organizar e identificar componentes específicos.