2011-02-09 39 views

Trả lời

12

Trên MacOSX, tiêu đề chính xác là <ext/hash_map> không phải <hash_map>. đây làm việc tốt:

#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; 
} 

Bằng cách này, tôi thích sử dụng <tr1/unordered_map>.

+0

Tôi vẫn nhận được "băm_map" không được khai báo trong phạm vi này "sau khi đã làm theo hướng dẫn của bạn. –

+0

Bạn đã sử dụng 'sử dụng không gian tên __gnu_cxx;' hoặc '__gnu_cxx :: hash_map '? –

+0

cảm ơn bạn. giải quyết. –

5

Tiêu đề <hash_map> không phải là một phần của tiêu chuẩn C++ và là một triển khai cụ thể cho trình biên dịch. Không có đảm bảo rằng bạn sẽ có thể tìm thấy nó trên bất kỳ hệ thống cụ thể, hoặc rằng các triển khai khác nhau phát sinh trên mỗi hệ thống sẽ được tương thích lẫn nhau với nhau.

Nếu bạn muốn sử dụng bản đồ băm trong C++, bạn có thể muốn xem xét boost::unordered_map, tr1::unordered_map hoặc bản trình diễn mẫu C++ 0x của std::unordered_map. Các triển khai này được chuẩn hóa khá, hoặc bằng ISO hoặc bởi cộng đồng Boost, và có thể dễ dàng cài đặt trên hầu hết các trình biên dịch C++. Tôi biết rằng có một chút tự mãn khi tôi nói "hãy viết lại mã này bằng cách sử dụng một thư viện khác", nhưng cho rằng C++ sắp lấy được các thùng chứa băm của biểu mẫu này, đó có thể là một đầu tư đáng giá.

Các vấn đề liên quan