hash<T>
ユーザー定義のファンクターを定義する必要があるC++ 11標準からはわかりません。
たとえば、23.5.2 Header<unordered_map>
では、次のように表示されます。
template <class Key,
class T,
class Hash = hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<std::pair<const Key, T> > >
class unordered_map;
hash<T>
これは、デフォルトでがグローバル名前空間で検索されるのに対し、equal_to<>
は名前空間で検索されることを示唆していstd
ます。
hash<>
との名前空間の違いはなぜequal_to<>
ですか?
(実際、http://www.cplusplus.com/reference/unordered_map/unordered_map/std
の説明では、どちらも名前空間を指定していません。)
したがって、ユーザー型のファンクターを定義するとき、それをブロックhash<>
内に囲む必要namespace std { }
がありますか?それとも現在の名前空間に残すことができますか?
コードに が含まれていない場合、using namespace std;
STL コンテナーは、プリミティブ型に関連付けられた事前定義されたファンクターを名前空間でunordered_map
検索する方法を知っているのでしょうか? デフォルトではこれらが見つからないようです。std
hash<>
Hash = hash<Key>
これらがばかげた質問である場合は申し訳ありません..