从 C++11 标准中我不清楚hash<T>应该在哪里定义用户定义的函子。
例如,在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>无法找到这些。
对不起,如果这些是愚蠢的问题..