从 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>
无法找到这些。
对不起,如果这些是愚蠢的问题..