自分のユーザー定義型の新しいハッシュ関数と比較演算子を定義するために、stdext::hash_compareを適切にオーバーライドする方法の簡単な例を見たいと思います。Visual C ++(2008)を使用しています。
質問する
8902 次
3 に答える
8
これがあなたがそれをする方法です
class MyClass_Hasher {
const size_t bucket_size = 10; // mean bucket size that the container should try not to exceed
const size_t min_buckets = (1 << 10); // minimum number of buckets, power of 2, >0
MyClass_Hasher() {
// should be default-constructible
}
size_t operator()(const MyClass &key) {
size_t hash_value;
// do fancy stuff here with hash_value
// to create the hash value. There's no specific
// requirement on the value.
return hash_value;
}
bool operator()(const MyClass &left, const MyClass &right) {
// this should implement a total ordering on MyClass, that is
// it should return true if "left" precedes "right" in the ordering
}
};
その後、あなたはただ使うことができます
stdext::hash_map my_map<MyClass, MyValue, MyClass_Hasher>
于 2009-05-16T07:40:20.757 に答える
1
ここに行きます、MSDNからの例
于 2009-05-16T07:38:00.997 に答える
0
非メンバー関数を使用することを好みます。
Boost のドキュメント記事「Extended boost::hash for a custom data type 」で説明されている方法は機能しているようです。
于 2009-10-16T11:28:36.743 に答える