2

質問は以前に尋ねられましたが、同じ文脈ではありません。

コード:

    namespace std
    {
    template <typename T, typename U>
    struct hash < pair <T,U> >
    {
        size_t operator()
        {
            return hash<T>()(first) ^ hash<U>()(second);
        }
    };
    }

要素を並べ替える必要がないため、unordered_mapを使用しようとしています。ただし、これにはハッシュ比較関数が必要です。次のコードは、コンパイル時エラーを生成します。

「エラー:関数定義がパラメータを宣言していません」

問題は、私のマップに組み込みのタイプだけでなく、次のような混合物が含まれていることです。

typedef std::vector<Point> Point_Set;
typedef std::unordered_map < Point_Set, double > Tree;

これについて何かアイデアはありますか?

4

2 に答える 2

2

The operator needs to take a pair as a parameter, and use the first and second members of that:

size_t operator()(pair<T,U> const & pair)
{
    return hash<T>()(pair.first) ^ hash<U>()(pair.second);
}
于 2012-04-10T10:21:51.453 に答える
0

ここには、C++のように見えないものがいくつかあります。

  • ハッシュ構造体には2つのテンプレート引数がありますが、1つで呼び出します。
  • operator()はパラメーターを取りませんが、パラメーターを指定します。
  • 最初はどこにも宣言されていませんが、operator()のパラメーターとして使用します。
于 2012-04-10T10:06:00.943 に答える