のキーとしてオブジェクトを使用しているunordered_map
ので、ハッシュ関数を定義する必要があります。私の質問は、ハッシュ関数をどこに実装すべきかということです。クラス実装と一緒に配置する必要がありますか、それとも必要な場所の近くに実装する必要があります。
更新:違いが生じる場合、これはすべてフレームワークに基づいています
多くの場合に再利用する必要があると予想される場合はunordered_map
、クラスのように、見える場所に配置してください。
1回限りのunordered_map
場合は、使用する場所の近くに置いてください。ラムダを使用することもできます。
少なくとも で==
等値関数として使用している場合は、クラス定義に入れますunordered_map
。ハッシュ関数の実装は、等値比較の実装に依存します。ハッシュ関数が変更された場合に誰かがハッシュ関数を変更しない可能性を減らすために、両方を一緒に保持することには明確な利点があります==
。
マップに特別な等価関数も定義している場合は、2 つの関数を一緒に定義する必要があります。おそらく、マップをインスタンス化するために使用される場所の近くです。
私の意見では、ハッシュ関数が以下のように基本的なものである場合、それはクラスのメソッドであり、インラインである必要があります。
int hashFunction(long x){
return (int) (x % N);
}
もう少し複雑なハッシュ関数の場合は、このクラスのメソッドにする必要があります。そのクラスに固有の「N」が必要になるためです。