Kurze Frage … Ist hash_map Teil der STL?
Ist hash_map Teil der STL?
Jake
Leichtigkeitsrennen im Orbit
Die STL hat hash_map
sondern die C++-Standardbibliothek nicht.
Aufgrund eines weit verbreiteten Missverständnisses können Sie die C++-Standardbibliothek als „die STL“ oder Teile der Implementierung der C++-Standardbibliothek in Ihrer Toolchain als „eine STL-Implementierung“ betrachten.
Es ist nicht.
Es ist auch eine große Schande, dass sowohl MSVC++ als auch GCC (die implementieren hash_map
als Compiler-spezifische Erweiterung), legen Sie es in die std
Namensraum, was nicht nur höchst irreführend, sondern laut Standard auch illegal ist. *Seufzen*
C++11 eingeführt hat std::unordered_map
was nicht unähnlich ist.
Razlebe
Zitat von Wikipedia (Hervorhebung hinzugefügt):
Von dem STL Seite:
Die Standard Template Library (STL) ist eine Softwarebibliothek teilweise in der C++-Standardbibliothek enthalten.
…und dann von der hash_map Seite
In der Programmiersprache C++
hash_map
ist der Name eines gehashten assoziativen Containers in der Standardvorlagenbibliothek. Es wird von mehreren Implementierern bereitgestellt, wie z. B. dem GNU C++-Compiler und Microsofts Visual C++. Es ist nicht Teil der C++-Standardbibliothekaber der C++ Technical Report 1 enthält den sehr ähnlichen Containerunordered_map
die im kommenden C++0x-Standard enthalten sein wird.
Also kurz gesagt,
- JA es ist Teil der STL.
- Aber es ist nicht Teil der Standardbibliothek.
- Es wird jedoch von mehreren sehr beliebten Implementierungen unterstützt.
-
@razlebe: du konntest nicht einfach ja oder nein sagen?
– fürsvarir
6. Mai 11 um 8:13 Uhr
-
@forsvarir: Natürlich, aber das Zitieren von Wikipedia verleiht meiner Antwort eine gewisse Glaubwürdigkeit. 😉
– Razlebe
6. Mai 11 um 8:14 Uhr
-
Wichtig, da Sie wissen, dass es nur mäßig portierbar ist, sollten Sie, wenn Sie es trotzdem verwenden möchten, Ihre Compiler-Dokumentation überprüfen, um herauszufinden, in welchem Header und Namensraum es sich befindet – es ist wahrscheinlich nicht einfach
#include <hash_map>
/std::hash_map<a, b> x
obwohl es nicht viel schwerer sein wird….– Toni Delroy
6. Mai 11 um 8:14 Uhr
-
@forsvarir: hier ist es schwierig. Die Frage von OP muss mit “Ja” beantwortet werden, aber die beabsichtigte Frage von OP sollte mit “Nein” beantwortet werden …
– Alexander C.
6. Mai 11 um 8:27 Uhr
-
@Alexandre C.: Tut mir leid, leichtes Arbeitsgeplänkel (ich arbeite mit razelbe) … es kann manchmal schwierig sein, eine klare Antwort aus ihm herauszuholen 🙂
– fürsvarir
6. Mai 11 um 8:32 Uhr
Das Problem ist, dass es keine vereinbarte Bedeutung für den Begriff gibt STL. Ist hash_map
Teil von Standard-C++? Nein, ist es nicht. unordered_map
wird jedoch Teil des neuen C++-Standards sein und ist eine mit Hashing implementierte Karte.
-
Und wenn Ihre Definition von STL enthält einige der leicht verfügbaren Implementierungen, dann könnte es enthalten
hash_map
.– James Kanze
6. Mai 11 um 8:29 Uhr
-
Dort ist eine vereinbarte Bedeutung. Es ist nur so, dass einige Leute damit nicht einverstanden sind.
– Leichtigkeitsrennen im Orbit
6. Mai ’11 um 8:40 Uhr
-
@Tomalak Wenn einige Leute damit nicht einverstanden sind, dann ist es nicht vereinbart.
– James Kanze
6. Mai 11 um 8:54 Uhr
-
@James: Bitte gehen Sie zurück und lesen Sie meinen Kommentar noch einmal, als wäre er von einem riesigen Smiley umgeben.
– Leichtigkeitsrennen im Orbit
6. Mai 11 um 8:57 Uhr
Alexandre C.
ja, hash_map
ist Teil von STL. Wie auch immer es ist nicht Teil der Standardbibliothek von C++03.
hash_map ist ein Teil von STL, aber kein Teil von Standard C++ (C++11). Und es gibt eine ähnliche Implementierung von hash_map namens “std::unordered_map” in Standard-C++:
http://www.cplusplus.com/reference/unordered_map/unordered_map/
Derzeit haben GNU C++ und MSVC++ hash_map für die Compilererweiterung sowie Boost implementiert. Inzwischen hat SGI eine eigene Implementierung für hash_map. Sie können sich darauf beziehen http://www.sgi.com/tech/stl/hash_map.html für Details.
Raghuram
Nein … Hash_map ist nicht Teil des STL-Standards.
.
Keine Verwendung
unordered_map
. Brauchen Sie wirklich eine Hash-Map? Wenn nicht, sehen Sie, obstd::map
Ihren tatsächlichen Anforderungen entspricht.– Martin York
6. Mai 11 um 8:17 Uhr
@ Martin:
hash_map
ist Teil der STL.– Alexander C.
6. Mai 11 um 8:21 Uhr
Bitte STL definieren. Meinst du die C++-Standardbibliothek? Oder meinen Sie die ursprüngliche Standard Template Library, die vor vielen Jahren veröffentlicht wurde und später teilweise als aktueller C++-Standard übernommen wurde? Normalerweise ist es uns egal, ob Sie STL informell als stdlib verwenden, aber in diesem Fall ist es wichtig. Standard-C++ hat nicht
hash_map
, STL tut. (Future C++ und Boost habenunordered_map
eine Hashmap.)– GManNickG
6. Mai 11 um 8:28 Uhr