hash_map定义在__gnu_cxx名字空间下 原型是: template<class _Key, class _Tp, class _HashFcn = hash<_Key>, class _EqualKey = equal_to<_Key>, class _Alloc = allocator<_Tp> > class hash_map; 使用hash_map + Keytype: 需要自定义 _HashFcn, _EqualKey 如果只提供_Key, _Tp, 就需要自己特化hash<_Key>, equal_to<_Key> hash<_key> 定义在 __gnu_cxx下 equal_to<_Key> 定义在std 名字空间下 使用string时: #include <ext/hash_map> using namespace __gnu_cxx; namespace __gnu_cxx { template <> struct hash<string> { size_t operator () (const string & s) const { return __stl_hash_string(s.c_str()); } }; } 这样就行, equal_to<string> 库内部已经提供了