c++ - hashing - unordered_map example
boost:: unordered_map-¿Necesita especificar una función hash personalizada para hashing std:: set<int>? (2)
De acuerdo con la documentación de Boost :
la función hash predeterminada es Boost.Hash
Y, de acuerdo con la documentación de Boost.Hash , se proporcionan funciones predeterminadas de hash para los contenedores estándar. En consecuencia, ya hay una función hash escrita para std::set
. Los contenedores hash Boost no son lo suficientemente inteligentes como para saber cómo configurar conjuntos hash automáticamente, pero son lo suficientemente inteligentes como para utilizar la implementación que ya se proporciona.
¡Espero que esto ayude!
Me gustaría utilizar boost::unordered_map<key,value>
, donde key
es std::set<int>
. Dado que un conjunto de enteros no es de tipo incorporado, supuse que tenía que proporcionar mi propia función hash (o, mejor dicho, estaba pensando en utilizar hash_range de boost ).
Sin embargo, ahora traté de inicializar un hash map como este, sin proporcionar una función hash ni un predicado de igualdad, y gcc no se quejó. ¿Que está sucediendo aquí? ¿Es el impulso lo suficientemente inteligente como para manipular contenedores STL por sí solo? ¿Esto va a ser más lento que si usara una función hash personalizada? ¿Qué hay de usar boost::hash_range
?
Gracias por adelantado.
La función boost::hash< Key >
predeterminada está siendo elegida. De acuerdo con su documentación
Como cumple con TR1, funcionará con:
integers floats pointers strings
También implementa la extensión propuesta por Peter Dimov en el número 6.18 de la Lista de problemas del informe técnico de la extensión de la biblioteca (página 63), lo que agrega soporte para:
arrays std::pair the standard containers. extending boost::hash for custom types.
http://www.boost.org/doc/html/hash.html
Así que sí, el impulso es lo suficientemente inteligente como para hash contenedores STL. A menos que sepa algo específico de su caso de uso particular de set
, dudo que tenga sentido proporcionar su propia función hash.