2017-03-14 6 views
-2

Ich implementiere bestimmte Algorithmus und ich verwende in diesem Algorithmus map<string,map<string,double>>. Es funktioniert perfekt und liefert korrekte Ergebnisse, aber wenn ich map<string,map<string,double>> für unordered_map<string,map<string,double>> ändere, funktioniert mein Algorithmus für bestimmte Eingaben nicht mehr.Karte vs ungeordnete Karte

Ich möchte fragen, ob mir etwas im Unterschied zwischen unordered_map und map fehlt. Gibt es etwas Wesentliches, das dies verursachen könnte?

EDIT: Es ist Floyd-Warshall-Algorithmus und ich glaube nicht, dass es ein Problem mit der Datensortierung sein wird. Onlt Sache, die ich Karte für verwende, ist nur für das Herstellen einer Matrix mit Informationen über Randwert zwischen 2 Knoten.

+0

welche Algorithmen? Was meinst du mit "hört auf zu arbeiten"? – user1810087

+0

Es kann sein, dass Ihr Programm zu einem bestimmten Zeitpunkt undefiniertes Verhalten aufruft, und dies passiert glücklicherweise, was Sie wollen mit 'map <,>', aber nicht mit 'unordered_map <,>'. Bitte posten Sie eine [MVCE] (https://stackoverflow.com/help/mcve). – cdhowie

+0

Floyd-Warshall .. Ich kann das nicht veröffentlichen, deshalb frage ich, ob es irgendeinen Unterschied gibt, der dies verursachen könnte. Ich denke, dass es keinen Unterschied geben sollte. Nur in den Dingen wie Zeit Komplexität – scarface

Antwort

0

Ja, unordered_map enthält ungeordnete Daten. Wenn also ein Algorithmus geordnete Daten benötigt, wird der Algorithmus fehlschlagen.

1

Hängt davon ab, welcher Algorithmus das ist. map wird automatisch seine Elemente nach Schlüssel sortieren, während unordered_map nicht damit zu tun haben wird.

Daher werden Sie wahrscheinlich feststellen, dass, obwohl die darin enthaltenen Daten identisch sind, es in anderer Reihenfolge ist und das Ihr Ergebnis beeinträchtigt.

map ist am besten für statische Daten, die Tatsache, dass die Schlüssel bestellt werden, ermöglicht es, Dinge schneller zu finden. Sortierung es kann jedoch zeitaufwändig sein, also wenn Sie eine map benötigen, aber es wird ständig geändert, unordered_map kann die schnellere Wahl werden.

+0

Bearbeitet -> Algorithmus hinzugefügt – scarface

+0

@scarface Poste deinen Code. – Havenard

+1

* "map" ist am besten für statische Daten, die Tatsache, dass die Schlüssel bestellt sind, ermöglicht es, Dinge schneller zu finden. "* Ich bestreite diesen Anspruch. Nachschlagen in einer "Map" hat O (log n) Zeitkomplexität, während Nachschlagen in einer "ungeordneten_ Map" eine durchschnittliche O (1) Zeitkomplexität hat. Ob man in der Wandzeit tatsächlich schneller ist als die andere, hängt von der Anzahl der Elemente, der Anzahl der Kollisionen in der ungeordneten Karte und den Zugriffsmustern der Anwendung ab. – cdhowie

0

Okay, also - beantworten Sie meine Frage: Es gibt keinen anderen grundlegenden Unterschied zwischen map und unordered_map. Wenn ich keine sortierten Daten brauche und ich einfach map für unordered_map ändere, ist alles in Ordnung.

Ich denke, es war nicht so ein Problem zu sagen, dass es keinen Unterschied zwischen diesen beiden außer sortierten Daten gibt.