Heim >Backend-Entwicklung >C++ >Wie kann ich eine std::map nach Wert statt nach Schlüssel sortieren?
Sortieren einer std::map nach Wert
Das Sortieren einer std::map nach Wert statt nach Schlüssel kann komplexer sein als das Sortieren nach Schlüssel. Hier ist eine ausführliche Analyse des Problems und eine Lösung:
Lösung 1: Verwenden einer Multimap
Um eine std::map nach Wert zu sortieren, können wir erstellen eine Multimap mit den Werten als Schlüsseln und den Schlüsseln als Werten. Dadurch können wir nach den Werten sortieren, wie im folgenden Beispiel:
template<typename A, typename B> std::multimap<B,A> flip_map(const std::map<A,B> &src) { std::multimap<B,A> dst; std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<A,B>); return dst; }
Indem wir die Original-Map durchlaufen und die gespiegelten Paare in die Multimap einfügen, kehren wir im Wesentlichen die Schlüssel-Wert-Beziehung um und können dann Sortieren Sie nach den neuen Schlüsseln (den ursprünglichen Werten).
Lösung 2: Generische assoziative Quelle (C 11 Erforderlich)
Für alternative assoziative Container (z. B. std::unordered_map) können wir die folgende generische Lösung verwenden:
template<typename A, typename B, template<class,class,class...> class M, class... Args> std::multimap<B,A> flip_map(const M<A,B,Args...>& src) { std::multimap<B,A> dst; std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<A,B>); return dst; }
Diese Überladung funktioniert für beide std::map und std::unordered_map unter Verwendung variadischer Vorlagen, um verschiedene assoziative Containertypen zu verarbeiten.
Das obige ist der detaillierte Inhalt vonWie kann ich eine std::map nach Wert statt nach Schlüssel sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!