Soy relativamente nuevo en C++. En Java, es fácil para mí crear instancias y utilizar un hashmap. Me gustaría saber cómo hacerlo de una manera sencilla en C++, ya que vi muchas implementaciones diferentes y ninguna de ellas me pareció simple.Implementación de hashmap simple en C++
Respuesta
La mayoría de los compiladores deberían definir std::hash_map
para usted; en el próximo estándar C++0x
, será parte de la biblioteca estándar como std::unordered_map
. El STL Page en él es bastante estándar. Si usa Visual Studio, Microsoft tiene una página.
Si desea utilizar su clase como el valor, no como la clave, entonces no necesita hacer nada especial. Todos los tipos primitivos (cosas como int
, char
, bool
e incluso char *
) deberían "solo funcionar" como claves en un hash_map
. Sin embargo, para cualquier otra cosa, tendrá que definir sus propias funciones de hash e igualdad y luego escribir "funtores" que las envuelvan en una clase.
Asumiendo que su clase se llama MyClass
y ya se han definido:
size_t MyClass::HashValue() const { /* something */ }
bool MyClass::Equals(const MyClass& other) const { /* something */ }
Tendrá que definir dos funtores para envolver esos métodos en los objetos.
struct MyClassHash {
size_t operator()(const MyClass& p) const {
return p.HashValue();
}
};
struct MyClassEqual {
bool operator()(const MyClass& c1, const MyClass& c2) const {
return c1.Equals(c2);
}
};
Y instancia su hash_map
/hash_set
como:
hash_map<MyClass, DataType, MyClassHash, MyClassEqual> my_hash_map;
hash_set<MyClass, MyClassHash, MyClassEqual> my_hash_set;
todo debería funcionar como se esperaba después de eso.
Pruebe las clases de unordered de boost.
Eche un vistazo a boost.unordered, y es data structure.
¡Usar hashmaps en C++ es fácil! Es como usar el mapa C++ estándar. Puede usar la implementación del compilador/biblioteca de su unordered_map
o usar la proporcionada por boost, o algún otro proveedor. Aquí hay una muestra rápida. Encontrarás más si sigues los enlaces que se te dieron.
#include <unordered_map>
#include <string>
#include <iostream>
int main()
{
typedef std::tr1::unordered_map< std::string, int > hashmap;
hashmap numbers;
numbers["one"] = 1;
numbers["two"] = 2;
numbers["three"] = 3;
std::tr1::hash<std::string> hashfunc = numbers.hash_function();
for(hashmap::const_iterator i = numbers.begin(), e = numbers.end() ; i != e ; ++i) {
std::cout << i->first << " -> " << i->second << " (hash = " << hashfunc(i->first) << ")" << std::endl;
}
return 0;
}
Salida Simple Hash Map (Hash Table) Implementation in C++ de una tabla hash básica con pares de valores clave de tipo genérico y la estrategia de encadenamiento separado.
- 1. Implementación de un HashMap
- 2. Implementación de HashMap personalizada
- 3. Implementación simple de cifrado en C
- 4. Simple C# Implementación de caché ASP.NET
- 5. ¿En qué se diferencia la implementación de LinkedHashMap de HashMap?
- 6. implementación simple Administración de documentos
- 7. ¿Cuál es la implementación más simple de RTTI para C++?
- 8. Implementación de una cola simple usando matrices
- 9. hashmap de memoria baja recomendado para la implementación de Java
- 10. Implementación Hashmap para contar las ocurrencias de cada carácter
- 11. implementación genérica en C
- 12. Implementación simple de Android C2DM requerida
- 13. Asignación de Hashmap a Hashmap
- 14. Implementación de cola de prioridad en C
- 15. implementación logsumexp en C?
- 16. HashMap Serializability
- 17. Implementación de ECC en C
- 18. Implementación de cola en C#
- 19. Implementación de RAII en C#
- 20. Implementación de MVar en C?
- 21. Implementación de memmove en C
- 22. Implementación de la derivada en C/C++
- 23. Preguntas sobre la implementación de un simulador de CPU simple
- 24. Implementación simple para detectar ciclos en un gráfico dirigido en C#
- 25. C# Implementación de Math.Sqrt
- 26. R * ¿Implementación de C?
- 27. Buscar un HashMap en un ArrayList de HashMap
- 28. Explicación de Quadtree e implementación de C
- 29. implementación merge sort en C++
- 30. puntero inteligente Implementación en C
Olvidé decir que estoy usando Unix. El ejemplo que codificaste se ve muy simple, lo intentaré. Pero el método HashValue() debería crearme a mí mismo, ¿verdad? Al preguntarle que debido a que Java tiene un método hashcode() predeterminado para la clase Object, no sé cómo funciona en C++. –
Agregué más explicación a la respuesta. Además, las cosas de impulso también se han recomendado; es análoga, pero aprender (algunas partes de) impulsar puede ser como aprender un idioma completamente nuevo. desordenado no es un mal lugar para comenzar. – hazzen