O que então é um mapa? - Um mapa é um conjunto de pares de chave/valor. Em C ++, as chaves são do mesmo tipo e os valores também são do mesmo tipo. Há multiset e multimap. Um multiset é um conjunto em que os valores não são únicos; isto é, pode haver mais de um dos mesmos valores. Não se esqueça que os valores do conjunto são chamados de chaves em c++. Em um mapa, alguns dos valores podem ser os mesmos, mas as chaves devem ser diferentes (únicas). Em um multimap, pode haver mais de uma chave, que são iguais.
O título deste artigo é "set vs mapa em c ++". Portanto, multiset e multimap não são considerados neste artigo; Apenas o conjunto e o mapa são comparados e contrastados.
Cada vez que uma chave é inserida em um conjunto, o conjunto é recortado. NOTA: Um conjunto em C ++ também pode ter pares de chave/valor; e esta não é uma visão matemática do conjunto. - Ainda assim, em C ++, um conjunto pode ter pares de chave/valor. Portanto, cada vez que um par de chaves/valor é inserido em um conjunto, o conjunto é reembolsado por chaves. Por outro lado, um mapa por definição consiste em pares de chave/valor onde as chaves não têm duplicado. Com o mapa também, cada vez que um par de chaves/valor é inserido no mapa, o mapa é reembolsado por chaves. O conjunto e o mapa são os mesmos a esse respeito.
Tanto o conjunto quanto o mapa cada um tem a especialização do modelo de comparação. Ambos são recipientes associativos. Para qualquer um deles, para ter a estrutura de dados classificada ascendente, use a especialização do modelo de comparação, menos, substituindo "chave", com o tipo de chave. Para qualquer um deles, para ter a estrutura de dados classificada descendente, use a especialização do modelo de comparação, maior, substituindo "chave", com o tipo de chave. Para os dois, menos é o padrão.
Para ambas as estruturas de dados, as funções de membro são categorias nas seguintes categorias: construções (incluindo cópia e atribuição), iteradores, modificadores, observadores, operações e troca. Em todas essas categorias, as funções de membro para o conjunto e o mapa são semelhantes.
A estrutura de dados do conjunto não possui a categoria de acesso a elementos, mas o mapa possui. A categoria de acesso a elementos consiste nos operadores de colchetes quadrados e nas funções de membro AT () que são usadas como as contrapartes para o vetor. Eles são usados para acessar (digitalizar) cada um dos elementos no mapa. O conjunto não possui esses operadores ou funções. Para o conjunto, os elementos são acessados usando iteradores. Elementos também podem ser acessados para o mapa usando iteradores semelhantes.
Acima estão as principais semelhanças e diferenças para o conjunto e o mapa. A peculiaridade nesta comparação é com o uso de pares de chave/valor. O par de chaves/valor é da estrutura chamada par na biblioteca do utilitário C ++. O restante deste artigo fornece uma breve descrição de como o par é empregado no conjunto e no mapa, começando com o que é um par:
Par
A sintaxe de um par literal é:
valor chave
Uma série desses pares que consistiriam em um conjunto ou mapa é:
"Lemons", 8
"laranjas", 5
"peras", 12
Isso representa uma estrutura de dados de frutas e seus números encontrados em uma cesta. A chave para cada par é o tipo de string; e o valor para cada par é do tipo inteiro. O programa a seguir constrói três pares diferentes do mesmo value_type, string/int:
#incluir
#incluir
usando namespace std;
int main ()
parpr1 = "Lemons", 8;
parpr2 = "laranjas", 5;
parpr3 = "peras", 12;
retornar 0;
Observe que a biblioteca do utilitário foi incluída. Os nomes dos pares são PR1, PR2 e PR3. Eles são do mesmo value_type, string/int.
A chave/valor de um par não deve necessariamente ser string/int. Pode ser iterador/bool com a sintaxe literal:
iterator, bool
Em um objeto de par, bool é verdadeiro ou falso, e o iterador é o nome do iterador. É esse tipo de par que é retornado quando um par de chave/valor, como um par de string/int, é inserido em um conjunto ou mapa. O componente bool é verdadeiro, se e somente se a inserção do par ocorreu. O componente iterador aponta para o elemento inserido específico (chave e valor) como um todo.
A chave de um par é chamada "Primeira" em C ++; e o valor do par é chamado "segundo".
Construções de conjunto e mapa
Definir
Um conjunto vazio de pares de string/int seria construído da seguinte maneira:
#incluir
#incluir
#incluir
usando namespace std;
int main ()
definir> st;
retornar 0;
A especialização do modelo principal é "par" e é considerado um componente. O único componente refere -se ao par (de chave/valor).
Mapa
Um mapa vazio de pares de string/int seria construído da seguinte maneira:
#incluir
#incluir
#incluir
usando namespace std;
int main ()
mapaMP;
retornar 0;
Aqui, a especialização do modelo começa com a chave e depois o valor. A especialização do modelo principal é "String" e a especialização do modelo de valor é "int". Existem dois componentes para o mapa, que são a chave e o valor. Para o conjunto, há um componente que consiste em dois componentes internos. Observe a diferença.
Inserção
Definir
O código de função C ++ Main () a seguir mostra como os pares podem ser inseridos em um conjunto e impresso (exibido na tela):
parPRA = "peras", 12, prb = "laranjas", 5, prc = "Lemons", 8;
definir> st;
st.inserir (PRA); st.inserir (prb); st.inserir (PRC);
para (definido> :: iterator iter = st.começar(); iter != st.fim(); iter ++)
cout << iter->primeiro << " => " << iter->segundo << endl;
A saída é:
Limões => 8
laranjas => 5
peras => 12
Observe que, embora os pares de chave/valor não tenham sido inseridos em ordem crescente por chaves, os elementos onde classificados internamente pelas chaves. O conjunto sempre classificará seus elementos por chaves, sejam pares ou não.
Mapa
O código de função Main () a seguir mostra como os pares podem ser inseridos em um mapa e impressos (exibidos na tela):
parPRA = "peras", 12, prb = "laranjas", 5, prc = "Lemons", 8;
mapaMP;
MP.inserir (PRA); MP.inserir (prb); MP.inserir (PRC);
para (mapa:: iterator iter = MP.começar(); iter != MP.fim(); iter ++)
cout << iter->primeiro << " => " << iter->segundo << endl;
A saída é:
Limões => 8
laranjas => 5
peras => 12
Embora os pares de chave/valor não tenham sido inseridos em ordem crescente por chaves, os elementos onde classificados internamente pelas chaves. O mapa sempre classificará seus elementos por chaves.
Conclusão
As semelhanças e diferenças entre um conjunto e um mapa em C ++ são facilmente apreciadas por suas diferentes definições. A peculiaridade surge ao lidar com pares. Em C ++, um conjunto pode ter pares que não é realmente o que a matemática sugere. Mesmo assim, o programador precisa saber como lidar com pares para um conjunto e para um mapa.