2010-10-21 9 views
5

Gibt es eine Möglichkeit, std :: map nach den Daten und nicht nach dem Schlüssel zu sortieren? Im Moment dupliziert mein Code die gesamte Karte in einem Array, nur um dies zu tun.Std :: Karte nach Daten sortieren?

+1

Raten Sie brauchen eine andere Karte mit Schlüssel/Wert umgekehrt? –

+0

Habe auch keine gute Lösung gefunden. Sie können nicht einfach die Karte umtauschen (wie viele vorschlagen), weil zwei Werte identisch sein könnten, wodurch eine neue Karte erstellt wird, die weniger Elemente enthalten kann. Tatsächlich ** ist es unmöglich ** eine Karte nach Wert zu sortieren, da eine Karte nach Schlüssel sortiert ist (daher warum sie schnell ist). Selbst wenn Sie versuchen, eine neue Karte zu erstellen, die sortiert ist, indem Sie die Werte wie einen Vektor eingeben, erhalten Sie immer noch eine Karte, die nach Schlüssel sortiert ist !!! Die Art und Weise, wie ich in meinen Code implementierte, bestand darin, sortierte Vektoren für jeden der Schlüssel und Werte zu erstellen und die Vektoren in meiner Anwendung zu verwenden. Um die Vektoren zu machen, ich zuerst – user2544830

+0

Mögliches Duplikat von [STL Karte -> nach Wert sortieren?] (Http://stackoverflow.com/questions/2699060/stl-map-sort-by-value) –

Antwort

3

Soweit ich mich erinnern kann, geben std::map Ihnen den Iterator, der die durch den Schlüssel sortierten Einzelteile durchlaufen wird. Die einzige Möglichkeit, die sortierten Elemente nach dem Wert zu durchsuchen und die Map weiterhin zu verwenden, besteht darin, die gesamte Sammlung in eine andere Map umzuwandeln, wobei Schlüssel und Wert umgekehrt sind.

+0

Ich fand, dass mit ein einzelner Vektor und einfach Sachen zu finden war besser. – Jookia

+2

Wenn Sie dies tun, verlieren Sie die Schlüssel-Wert-Paar-Info. –

+0

Ich zeige auf Oli Charlesworths Antwort unter http://stackoverflow.com/a/5056797/158371 –