0

我想访问 c++ hash_map 的哈希值。我试过了:

__gnu_cxx::hash_map<string, int> my_table;
const hash<string> hh = my_table.hash_funct();
string s("hello");
size_t j = hh(s);

最后一行不会编译:

no match for call to '(const __gnu_cxx::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >) (std::string&)

所以很明显我不知道如何使用哈希函数。如果有人有小费,将不胜感激。

4

2 回答 2

4

旧的 STL 不包括 for 的专门化hashstd::string因为std::string它不是 STL 的一部分。STL 提供的专业化的完整列表记录在http://www.sgi.com/tech/stl/hash.html

最好的选择可能是使用现代等效的 , std::unordered_map,或者std::tr1::unordered_map如果您不能使用 C++11。

如果您确实出于某种原因需要使用hash_map,那么您可能可以自己专门研究它:

namespace __gnu_cxx {
    template <> struct hash<std::string> {
        size_t operator()(std::string const & s) const {
            hash<const char *> h;
            return h(s.c_str());
        }
    };
}
于 2012-06-29T15:48:15.137 回答
0

我在 cplusplus.com 上找不到 hash_map 参考,但阅读了这一行:hash_map<string, int>

我认为您在这里缺少模板参数:const hash<string> hh

不?

于 2012-06-29T15:48:09.047 回答