Definir vs mapa em C ++

Definir vs mapa em C ++
O objetivo deste artigo é dar as semelhanças e diferenças entre um conjunto e um mapa. "Vs" no título significa "versus". Primeiro de tudo, o que é um conjunto? - Um conjunto em C ++ é como o conjunto em matemática. Em C ++, um conjunto é um grupo de valores não necessariamente não relacionados, mas do mesmo tipo. Os valores de um conjunto são chamados chaves em c++.

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 ()

par pr1 = "Lemons", 8;
par pr2 = "laranjas", 5;
par pr3 = "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 ()

mapa MP;
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):

par PRA = "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):

par PRA = "peras", 12, prb = "laranjas", 5, prc = "Lemons", 8;
mapa MP;
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.