Necesito asignar un par de long long
a un double
, pero no estoy seguro de qué función hash usar. Cada par puede consistir en dos números, aunque en la práctica generalmente serán números entre 0
y aproximadamente 100
(pero una vez más, eso no está garantizado).¿Función hash para un par de largo?
Here es la documentación tr1::unordered_map
. Empecé como esto:
typedef long long Int;
typedef std::pair<Int, Int> IntPair;
struct IntPairHash {
size_t operator(const IntPair& p) const {
return ...; // how to hash the pair?
}
};
struct IntPairEqual {
bool operator(const IntPair& a, const IntPair& b) const {
return a.first == b.first
&& a.second == b.second;
}
};
tr1::unordered_map<IntPair, double, IntPairHash, IntPairEqual> myMap;
En general, nunca estoy seguro de qué función hash para su uso. ¿Cuál es una buena función hash de propósito general?
¿Usted ha considerado el uso de una o más de las siguientes funciones hash propósito general: http://www.partow.net/programming/hashfunctions/index.html son extremadamente rápido y eficiente . –