Ich verstehe nicht, std::tr1::unordered_map
Brauche ich ein assoziativer container, der macht mir den index eines bestimmten Objektes durch einen string, aber das hält auch die Reihenfolge der Einfügemarke, damit ich sehen kann für ein spezifisches Objekt durch seinen Namen oder einfach nur iterieren, auf es und abrufen von Objekten in derselben Reihenfolge, die ich eingefügt.
Ich denke, das hybrid-linked list und hash map sollte die Arbeit tun, aber bevor ich versuchte mit std::tr1::unordered_map
denken, dass es funktioniert, dass Art und Weise, die ich beschrieb, war es aber nicht. Also könnte jemand mir erklären, die Bedeutung und das Verhalten der unordered_map
?
@wesc: ich bin mir sicher, dass std::map implementiert STL, während ich bin sicher, dass std::hash_map ist NICHT in der STL (ich glaube ältere version von Visual Studio legen Sie es in einen namespace namens " stdext).
@Christoph: also, wenn ich das richtig, der Unterschied ist in der Umsetzung (und damit Leistungen), nicht in der Weise verhält es sich nach außen.
InformationsquelleAutor martjno | 2008-08-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Boost-Dokumentation von ungeordneten Containern
Der Unterschied liegt in der Methode, wie Sie erzeugen den look.
In der map/set-Container der
operator<
wird verwendet, um eine geordnete Baum.In die ungeordnete Container, einem
operator( key ) => index
verwendet wird.Sehen, hashing, eine Beschreibung wie das funktioniert.
InformationsquelleAutor Christopher
Haben Sie gebeten, für die kanonische Grund, warum Boost::MultiIndex wurde gemacht: Liste einfügen, um mit der schnellen Suche nach Schlüssel. Boost MultiIndex-tutorial: Liste schnell nachschlagen
InformationsquelleAutor user3755
Müssen Sie den index eines assoziativen container zwei Möglichkeiten:
Versuchen Boost.MultiIndex oder Boost.Aufdringlich. Ich habe nicht verwendet es auf diese Weise, aber ich denke, es ist möglich.
Ja, das denke ich nicht aufdringlich, auch gab es in 2008.
InformationsquelleAutor Adam Mitz
Sorry, lese deinen letzten Kommentar falsch. Ja, hash_map ist nicht in der STL-map ist. Aber unordered_map und hash_map sind die gleichen, von dem, was ich gelesen habe.
map -> log (n) einfügen, retrieval -, Iterations-effizient ist (und bestellt von key comparison)
hash_map/unordered_map -> Konstante Zeit einsetzen und herausholen, iteration Zeit ist keine Garantie für eine effiziente
Weder diese Arbeit wird für Sie durch sich selbst, da die map ordnet die Dinge auf der Grundlage der wichtigsten Inhalte, und nicht die insertion sequence (es sei denn, Ihr Schlüssel enthält Informationen über die insertion sequence).
Haben Sie entweder zu tun, was Sie beschrieben (Liste + hash_map), oder erstellen Sie einen Schlüssel geben, der die insertion sequence number plus einen angemessenen Vergleich-Funktion.
InformationsquelleAutor wesc
Ich denke, dass eine unordered_map und hash_map sind mehr oder weniger die gleiche Sache. Der Unterschied ist, dass die STL nicht offiziell eine hash_map (was Sie verwenden, ist wahrscheinlich eine compiler-spezifische Sache), so unordered_map ist der fix für die Lücke.
unordered_map ist nur, dass... ungeordnet. Sie kann nicht von ihm abhängen, unter Beibehaltung der Bestellung auf iteration.
InformationsquelleAutor wesc
Sie sicher, dass std::hash_map existiert in alle STL-Implementierungen? SGI-STL implementiert, jedoch GNU g++ hat es nicht (es liegt in der __gnu_cxx-namespace) 4.3.1 sowieso. Soweit ich weiß, hash_map schon immer non-standard, und jetzt tr1 ist die Befestigung.
InformationsquelleAutor wesc
@wesc: STL hat std::map... also was ist der Unterschied mit unordered_map? Ich glaube nicht, dass AWL umsetzen würden zweimal das gleiche und nennen es anders.
InformationsquelleAutor martjno