Tôi cần ánh xạ một cặp long long
tới một số double
, nhưng tôi không chắc chắn nên sử dụng hàm băm nào. Mỗi cặp có thể bao gồm hai số bất kỳ, mặc dù trong thực tế chúng thường sẽ là số giữa 0
và khoảng 100
(nhưng một lần nữa, điều đó không được đảm bảo).Hàm băm cho một cặp dài?
Here là tài liệu tr1::unordered_map
. Tôi bắt đầu như thế này:
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;
Nói chung, tôi không bao giờ chắc chắn chức năng băm nào sẽ sử dụng. Chức năng băm có mục đích chung tốt là gì?
Bạn đã xem là sử dụng một hoặc nhiều hàm băm mục đích chung sau đây: http://www.partow.net/programming/hashfunctions/index.html họ là cực kỳ nhanh và hiệu quả . –