2011-02-09 87 views
6
#include <iostream> 
#include <vector> 
#include <list> 

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

编译器说“的hash_map:没有这样的文件或目录 ” 需要帮助。谢谢。不能在Mac OSX找到了hash_map头

回答

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>

+0

在你的指南之后,我仍然没有在这个范围内声明“'hash_map'”。 – 2011-02-09 22:29:00

5

<hash_map>头文件不是C++标准的一部分,是编译器特定的实现。不能保证您能够在任何特定系统上找到它,或者每个系统上出现的各种实现将相互兼容。

如果要在C++中使用哈希映射,您可能需要查看boost::unordered_maptr1::unordered_map或原型C++ 0x编译器的std::unordered_map实现。这些实现相当标准化,可以由ISO或Boost社区实现,并且可以很容易地安装在大多数C++编译器上。我知道我只是说“用一个不同的库重写这段代码”是有点冒失的,但考虑到C++将要获得这种形式的哈希容器,这可能是一个值得的投资。