hash_map问题/教程

Vex*_*toR 3 c++ hashmap

我知道hashmap在Java中是如何工作的.但我无法完全理解C++.

我找到了一些简单的教程,但没有哈希函数等.

字符串是否需要哈希函数?

hash_map<string, string> hm;
hm.insert(make_pair("one", "two"));
hm.insert(make_pair("three", "four"));
Run Code Online (Sandbox Code Playgroud)

如果没有字符串的哈希函数,它将如何工作?如何添加哈希函数?

hash_map有什么好的教程吗?

谢谢!

tem*_*def 10

对于初学者来说,hash_map它不是标准的C++库; 它是Visual Studio和g ++附带的编译器扩展.如果要在C++中使用更标准化的哈希表,请查看Boost.Unordered库,TR1哈希容器,或者,如果您有更现代的编译器,请查看新的C++ 0x标准哈希容器类型.这些容器被命名unordered_map,unordered_set而不是更具暗示性,hash_map或者hash_set具有更标准化的支持并且更便于携带.

至于关于如何指定哈希函数的问题,hash_map对于大多数标准类型都有内置哈希函数,包括std::string,因此您不需要指定一个.如果您确实想要定义自己的哈希函数,则应创建一个重载的函数对象operator()以提供哈希代码,然后hash_map除了其他类型之外,还要对该类型进行参数化.例如:

struct MyCustomHash {
    size_t operator() (const string& str) const {
        /* Terrible hash function... for instructional purposes only! */
        return str.empty()? 0 : str[0];
    }
};

hash_map<string, int, MyCustomHash> myHashMap;
Run Code Online (Sandbox Code Playgroud)

现在myHashMap将使用MyCustomHash而不是默认的哈希函数.

希望这可以帮助!

  • 在TR1中,哈希映射称为unordered_map. (2认同)