2011-02-09 15 views

Odpowiedz

12

W systemie MacOSX poprawny nagłówek to <ext/hash_map>, a nie <hash_map>. Tu pracował w porządku:

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

Nawiasem mówiąc, wolę używać <tr1/unordered_map>.

+0

Nadal mam "" hash_map "nie została zadeklarowana w tym zakresie" po tym, jak podążałeś za twoim przewodnikiem. –

+0

Czy użyłeś 'using namespace __gnu_cxx;' lub '__gnu_cxx :: hash_map '? –

+0

dziękuję. rozwiązany. –

5

Nagłówek <hash_map> nie jest częścią standardu C++ i jest implementacją specyficzną dla kompilatora. Nie ma gwarancji, że będziesz w stanie znaleźć go w jakimś konkretnym systemie, lub że różne implementacje, które pojawią się w każdym systemie będą wzajemnie kompatybilne.

Jeśli chcesz użyć mapy skrótów w C++, możesz zajrzeć do boost::unordered_map, tr1::unordered_map lub prototypowej implementacji kompilatora 0x ++ 0x. Implementacje te są dość wystandaryzowane przez ISO lub społeczność Boost i mogą być łatwo zainstalowane na większości kompilatorów C++. Wiem, że to trochę aroganckie, gdybym po prostu powiedział "idź przepisać ten kod przy użyciu innej biblioteki", ale biorąc pod uwagę, że C++ ma zamiar zdobyć kontenery hash w tej formie, jest to prawdopodobnie opłacalna inwestycja.

Powiązane problemy