在Mac OSX下找不到hash_map标头

时间:2011-02-09 22:17:46

标签: c++ macos header

#include <iostream>
#include <vector>
#include <list>

#ifdef __GNUC__
#include <ext/hash_map>
#else
#include <hash_map>
#endif

编译器说“hash_map:没有这样的文件或目录 “ 需要帮忙。谢谢。

2 个答案:

答案 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_maptr1::unordered_map或原型C ++ 0x编译器的std::unordered_map实现。这些实现由ISO或Boost社区完全标准化,并且可以轻松地安装在大多数C ++编译器上。我知道仅仅说“使用不同的库重写此代码”对我来说有点冒昧,但考虑到C ++即将获得这种形式的哈希容器,这可能是值得的投资。