hashMap C++

1 resposta
M

Qual é a melhor maneira de trabalhar com hashmap em C++

1 Resposta

ViniGodoy

Ué... igual se trabalha no Java. Veja o exemplo (adaptado da Wiki americana):

#include <iostream>
#include <map>
#include <utility> // make_pair
using namespace std;
 
int main()
{
	map<char, int> myMap;
 
	//Insere elementos no mapa
	myMap.insert(pair<char, int>('a', 1));
	myMap.insert(pair<char, int>('b', 2));
	myMap.insert(pair<char, int>('c', 3));
	myMap.insert(mapType::value_type('d', 4)); // todos os containers padrão tem esse typedef
	myMap.insert(make_pair('e', 5));           // Também é possível usar a função makePair
 
        // apaga o primeiro elemento do mapa
	map<char, int>::iterator iter = myMap.begin();
        myMap.erase(iter);
 
        // escreve o tamanho do mapa
        cout << "Tamanho de myMap: " << myMap.size() << '\n';
 
	cout << "Entre uma chave para busca: ";
	char c;
	cin >> c;
 
	// find irá retornar o elemento onde a chave foi encontrada
	// or ou o fim do mapa, se não for
	iter = myMap.find(c);
	if( iter != myMap.end() ) 
		cout << "O valor é: " << iter->second << '\n';
	else
		cout << "Essa chave não está no mapa" << '\n';

        //Uma forma mais fácil é usar o operador de []        
        cout << "O valor é: " << myMap[c] << '\n';

        //Limpa o mapa
        myMap.clear();
}

Só lembre-se que como toda classe da STL, o map funciona através de cópia de valores. Se você tiver objetos complexos ao invés de tipos primitivos (como no exemplo), talvez fosse interessante usar os smart pointers da boost.

Só fique atento pois caso você prefira trabalhar com cópia, a performance pode cair muito caso seu operador de = e seu construtor de cópia não sejam bem eficientes. E o ideal é dar para esses dois caras a garantia de nothrow.

Criado 26 de maio de 2010
Ultima resposta 26 de mai. de 2010
Respostas 1
Participantes 2