如何获取哈希值,c ++ hash_map

时间:2012-06-29 15:32:02

标签: c++ stl hashmap

我想访问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&)

所以显然我不知道如何使用hasher函数。如果有人有小费,我们将不胜感激。

2 个答案:

答案 0 :(得分:4)

旧版STL未包含hash std::string的特化,因为std::string不是STL的一部分。 STL提供的完整专业列表记录在http://www.sgi.com/tech/stl/hash.html

如果您不能使用C ++ 11,最好的选择可能是使用现代等价物std::unordered_mapstd::tr1::unordered_map

如果您出于某种原因确实需要使用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());
        }
    };
}

答案 1 :(得分:0)

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

我认为你在这里错过了一个模板参数:const hash<string> hh

没有