Мне нужно сопоставить пару long long
с double
, но я не уверен, какую функцию использовать. Каждая пара может состоять из любых двух чисел, хотя на практике они обычно представляют собой числа между 0
и около 100
(но опять же, это не гарантируется).
Здесь - это документация tr1::unordered_map
. Я начал вот так:
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;
В общем, я никогда не знаю, какую функцию использовать хэш. Какая хорошая хэш-функция общего назначения?