#include <iostream>
#include <vector>
#include <list>
#ifdef __GNUC__
#include <ext/hash_map>
#else
#include <hash_map>
#endif
编译器说“hash_map:没有这样的文件或目录 “ 需要帮忙。谢谢。
答案 0 :(得分:12)
在MacOSX上,正确的标题位于<ext/hash_map>
而不是<hash_map>
。
这里工作得很好:
#if defined __GNUC__ || defined __APPLE__
#include <ext/hash_map>
#else
#include <hash_map>
#endif
int main()
{
using namespace __gnu_cxx;
hash_map<int, int> map;
}
顺便说一句,我更喜欢使用<tr1/unordered_map>
。
答案 1 :(得分:5)
<hash_map>
标头不是C ++标准的一部分,是特定于编译器的实现。无法保证您能够在任何特定系统上找到它,或者每个系统上出现的各种实现将彼此互相兼容。
如果要在C ++中使用哈希映射,可能需要查看boost::unordered_map
,tr1::unordered_map
或原型C ++ 0x编译器的std::unordered_map
实现。这些实现由ISO或Boost社区完全标准化,并且可以轻松地安装在大多数C ++编译器上。我知道仅仅说“使用不同的库重写此代码”对我来说有点冒昧,但考虑到C ++即将获得这种形式的哈希容器,这可能是值得的投资。