Autor Wątek: MinGW i hashmapa  (Przeczytany 914 razy)

Offline Xirdus

  • Redaktor

# Listopad 12, 2010, 23:58:52
Potrzebuję w moim projekcie użyć hashmapy (konkretnie to pojemnika z kluczem o szybkim czasie zarówno dostępu do elementów, jak i dodawania oraz usuwania ze środka; hashmapa wydaje się spełniać te wymagania najlepiej). Jednak mam problem, że tak powiem, natury "moralnej" ;) Otóż, gdy dodam nagłówek <hash_map>, to wyskakuje mi warning o następującej treści:
Cytuj
c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\backward\backward_warning.h|28|warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated.|
W pliku backward_warning.h pisze, by zamiast <hash_map> użyć <unordered_map>. Jednakże, po jego dołączeniu otrzymuję inny komunikat, tym razem błędu:
Cytuj
c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\c++0x_warning.h|31|error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.|

Tak więc, mam pytanie: który z tych dwóch użyć? Jeśli zdecyduję się na <hash_map>, grozi mi niemożność kompilacji kodu w przyszłości. Jeżeli natomiast wezmę <unordered_map>, to ryzykuję niemożnością kompilacji w teraźniejszości ;) Jednakże, z ustawienia standardu na c++0x może wyniknąć kolejny problem: ponieważ różnice między c++ a 0x są mi kompletnie nieznane (i raczej nie mam zamiaru się ich uczyć), narażam się na problemy z nich wynikające. Nie jestem w stanie podać przykładu, z racji tego, że w ogóle 0x nie znam; świadczy to najlepiej o niebezpieczeństwie takiego kroku.

Tu rodzą się pytania: czy użycie starego <hash_map> może realnie spowodować, że nie będę mógł skompilować kodu w przyszłości? Czy <unordered_map> jest w czymś lepszy od <hash_map>? Jakie są potencjalne problemy i korzyści z przejścia na 0x? Czy istnieje jakiś lepszy kontener spełniający podane na początku wymagania?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Paweł

  • Użytkownik

# Listopad 13, 2010, 00:12:44
spróbuj dołączyć MinGW\lib\gcc\mingw32\4.4.0\include\c++\tr1\unordered_map. Chodzi ogólnie o tr1 - te nagłówki nie wymagają c++0x

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Listopad 13, 2010, 11:33:27
Abstrahując od głównego problemu, poczytanie o C++0x na pewno nie zaszkodzi, a zaniechanie tego kroku spowoduje, używając twojej retoryki, wielkie niebezpieczeństwo, że w przyszłości nie będziesz rozumiał połowy kodu źródłowego ;).

http://en.wikipedia.org/wiki/C%2B%2B0x