Olá pessoal, sou o Filipe Névola, este blog foi muito ativo durante 2009 enquanto eu fazia universidade,
hoje em dia estou ativo no Twitter @FilipeNevola e voltando a escrever posts agora no meu perfil do Medium (29/05/2016).

[ 17/05/2009 ] 2

Mapa (map da STL)

Os mapas são uma espécie de containers associativos que armazenam elementos formados pela combinação de um valor fundamental e um valor mapeado. A estrutura de mapa está implementada na Standard Template Library (STL) na linguagem C++, para utilizar esta estrutura basta incluir a biblioteca map em seu código.

Em um mapa, a chave valor é geralmente usada para identificar o elemento, enquanto que o valor mapeado é alguma associação a esta chave. Os tipos das chaves e dos valores mapeados podem variar.

Um exemplo típico de um mapa é uma lista telefônica onde o nome é a chave e o número de telefone é o valor mapeado. Mais abaixo apresentaremos exemplos de utilização.

No âmbito da Maratona de Programação, o map é muito usado para mapear uma string para um número, um exemplo disso pode ser um grafo onde seus vértices são representados por nomes. Para resolver o problema deste exemplo citado, podemos mapear os nomes para números inteiros e assim usar os nossos bons e velhos códigos de grafos onde representamos vértices por valores inteiros.

Outro exemplo pode ser enxergar o Orkut como um grafo, onde cada usuário é um vértice. Se cada usuário estiver mapeado para um valor inteiro é muito mais fácil implementar os algoritmos de busca, por exemplo.

Para concluir podemos citar duas características principais do mapa:
- Chaves únicas: não existem duas chaves iguais no mapa. Para um recipiente semelhante associativo permitindo múltiplos elementos com chaves equivalentes, use Multimap.
- Cada elemento é composto de uma chave e um valor mapeado. Para elementos simples use set.

E para não ficarmos apenas na teoria segue um código em C++:
Exemplo de inserção e acesso utilizando o operador []
// Includes
#include "iostream" //Obs: o que está entre aspas deve estar entre '<' e '>'
#include "map"
#include "string"
using namespace std;
int main () {
map mymap; //Mapaeamento uma LETRA para uma STRING
mymap['a']="an element"; //mapeamento a para an element
mymap['b']="another element"; //mapeamento b para another element
mymap['c']=mymap['b']; //mapeamento c para another element também pois está pegando o valor de 'b' no mapa
cout << "mymap['a'] is " <<>
cout << "mymap['b'] is " <<>
cout << "mymap['c'] is " <<>
cout << "mymap['d'] is " <<>
cout << "mymap now contains " << (int) mymap.size() << " elements." <<>
}

Saída deste código:
mymap['a'] is an element
mymap['b'] is another element
mymap['c'] is another element
mymap['d'] is
mymap now contains 4 elements.

Obs: 'd' não foi mapeado, por esse motivo não aparece nada escrito após o seu 'is' na saída do código.

Não deixe de conferir como utilizar o set!

Referência: cplusplus.com
Anônimo comentou:

Eu diria que o orkut pode ser visto como um grafo e que "map's" nos ajudam a implementar esse grafo em uma linguagem, não que orkut pode ser visto como "map's".
Acho, porém, que foi isso que você quis dizer, mas se confundiu. Por isso, seria legal rever. No mais o blog ta legal

Filipe Névola comentou:

Foi isso que eu quis dizer sim, alias, eu vou dizer isso alguns posts a frente é porque ainda não é a hora de falar sobre grafos diretamente. Vou tentar seguir uma ordem de aprendizado. hehe..

obrigado pelo comentário e volte sempre!

Novo Comentário