0

のキーとしてオブジェクトを使用しているunordered_mapので、ハッシュ関数を定義する必要があります。私の質問は、ハッシュ関数をどこに実装すべきかということです。クラス実装と一緒に配置する必要がありますか、それとも必要な場所の近くに実装する必要があります。

更新:違いが生じる場合、これはすべてフレームワークに基づいています

4

3 に答える 3

3

多くの場合に再利用する必要があると予想される場合はunordered_map、クラスのように、見える場所に配置してください。

1回限りのunordered_map場合は、使用する場所の近くに置いてください。ラムダを使用することもできます。

于 2012-10-23T19:29:12.377 に答える
1

少なくとも で==等値関数として使用している場合は、クラス定義に入れますunordered_map。ハッシュ関数の実装は、等値比較の実装に依存します。ハッシュ関数が変更された場合に誰かがハッシュ関数を変更しない可能性を減らすために、両方を一緒に保持することには明確な利点があります==

マップに特別な等価関数も定義している場合は、2 つの関数を一緒に定義する必要があります。おそらく、マップをインスタンス化するために使用される場所の近くです。

于 2012-10-23T19:33:02.220 に答える
0

私の意見では、ハッシュ関数が以下のように基本的なものである場合、それはクラスのメソッドであり、インラインである必要があります。

int hashFunction(long x){
    return (int) (x % N);
}

もう少し複雑なハッシュ関数の場合は、このクラスのメソッドにする必要があります。そのクラスに固有の「N」が必要になるためです。

于 2012-10-23T19:37:58.500 に答える