デフォルトとは異なるハッシャーを使用してハッシュテーブルを確立する必要があるため、次のように記述します。
class foo {
public:
...
private:
struct myhasher {
size_t operator() (myclass bar) { return hash_calculation bar; }
}
static size_t hash_calculation (myclass bar) {
// do some calculation
}
hash_map<myclass, myhasher> myhashmap;
}
できます。なんらかの理由で、hash_calculation を置き換える非静的メンバー関数を作成する必要があります。たとえば、引数としてクラスの非静的メンバーが必要です。その後、ネストされた構造体で非静的メソッドを使用できないため、すべてが失敗しました。
これは、広く議論されている別の問題、つまり非静的関数を使用して比較またはソートを行う方法と似ています。例を参照してください: 比較関数内での非静的クラス メンバーの使用 と 、オブジェクト インスタンスのメンバー変数に依存するカスタム コンパレーターを使用した C++ std リスト ソート。どちらもコンパレータとしての関数の代わりにファンクターを確立しました。ただし、私の場合、特定の構造体オブジェクトではなく、hash_map 定義内にクラス名が必要なため、このトリックは機能しません。私は何をすべきか?よろしくお願いします。