我知道 hashmap 在 Java 中是如何工作的。但我无法完全理解 C++。
我找到了一些简单的教程,但是没有哈希函数等。
字符串需要哈希函数吗?
hash_map<string, string> hm;
hm.insert(make_pair("one", "two"));
hm.insert(make_pair("three", "four"));
如果没有字符串的哈希函数,它将如何工作? 如何添加哈希函数?
hash_map有什么好的教程吗?
谢谢!
最佳答案
对于初学者来说,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;
现在 myHashMap
将使用 MyCustomHash
而不是默认的哈希函数。
希望这对您有所帮助!
关于c++ - hash_map 问题/教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5303205/