2012-04-10 21 views
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; 

これに関するご意見はありますか?

+1

や '演算子を()(constのペア&)' –

答えて

2

size_t operator()(pair<T,U> const & pair) 
{ 
    return hash<T>()(pair.first)^hash<U>()(pair.second); 
} 
0

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

  • ハッシュ構造体には2つのテンプレート引数がありますが、それを1つと呼びます。
  • operator()はパラメータを取りませんが、1つ与えます。
  • 最初はどこにも宣言されていませんが、operator()のパラメータとして使用します。オペレータは、パラメータとしてペアを取り、そのfirstsecondメンバーを使用する必要があります
+0

あなたの最初のポイントについてこれは、 'std :: pair'の特殊化である引数に対して、1つのパラメータを持つテンプレートの部分的な特殊化です。 –

+0

@MikeSeymour部分的な特殊化はコード内にありません。 – selalerer

関連する問題