2009-03-03 4 views
4

Die Header hash_map und hash_set sind noch nicht im C++ - Standard enthalten, aber sie sind als Erweiterungen mit allen Compilern verfügbar, die ich in letzter Zeit benutzt habe.Wie allgegenwärtig ist hash_map?

Ich frage mich, wie sehr ich mich auf diese in echtem Code verlassen kann, ohne Portabilität zu opfern. Ich arbeite an Tools Projekte, die auf eine Vielzahl von Architekturen und Compiler ausgeführt werden müssen, zB:

  • Linux (x86_64, AMD/Intel): GCC, Intel, Portland Compiler
  • AIX (Power): GCC, xlC
  • Cray XT-Serie (AMD): GCC, Portland, Pathscale Compiler
  • IBM Blue Gene Series (Power): xlC, GCC
  • SGI Altix (Itanium): Intel Compiler
  • Fenster: Nicht wirklich eine Priorität, aber ich fühle mich frei nützliche Antworten zu geben.

Ich weiß, einige davon sind ziemlich exotisch, aber das ist nicht der Punkt. Welche Erfahrungen haben Sie mit STL-Erweiterungen über mehrere Plattformen und Compiler hinweg gemacht? Sind sie schon allgegenwärtig? Würde Sie verwenden sie in Ihrem Projekt?

+2

Einfache Antwort: Verwenden Sie nicht hash_map, sondern unordered_map oder unordered_set. –

Antwort

13

Ich würde wahrscheinlich für den Schub Equivelant suchen und das verwenden. Zumindest haben sie einen gewissen Druck von ihren Benutzern, plattformunabhängig zu sein. Ich kann mir nicht vorstellen, was passieren würde, wenn Sie einen Fehler gegen GCC- und Intel-Compiler einreichen und ihnen sagen würden, wie sie ihre Unterschiede bei der Implementierung von hash_map ausgleichen können. Am besten könntest du sie dazu bringen, miteinander zu reden. Angenommen, Sie haben das sogar erreicht, dann haben Sie nur korrigiert, wie Intel und GCC-Compiler anders sind. Viel Glück, alle anderen zusammen zu bringen und das Problem innerhalb weniger Jahre zu lösen.

Mindestens mit Boost kennen Sie irgendwelche Unterschiede zwischen den Plattformen werden von einer Organisation ausgearbeitet ..

EDIT Die Boost-Äquivalent scheinbar unordered set oder unordered map ist. (Danke Head Geek)

+1

Das "Boost Equivalent" ist, wenn ich mich nicht irre, "unordered_map" und "unordered_set". Du brauchst allerdings eine ziemlich neue Version von Boost. –

+1

Es geht auf diese Weise in den nächsten Standard, glaube ich. –

5

NEIN, Sie würden Ihre eigenen schreiben, wenn Sie eine ausreichend große Organisation/Projekt sind. Auf diese Weise können Sie sie an Ihre Bedürfnisse anpassen und Portabilitätsprobleme beheben. EA tat dies, mit ihrem "eastl" auf alle Gaming-Plattformen, PC, Mac, XBOX360, Wii, PS2, PS3 usw. zu zielen ...