Heim >Backend-Entwicklung >C++ >Wie sortiere ich eine std::map effizient nach Wert?
So sortieren Sie std::map nach Wert
Das Sortieren einer std::map nach Wert statt nach Schlüssel kann eine Herausforderung sein. Eine gängige Lösung besteht darin, eine temporäre Multimap zu erstellen, die die Schlüssel-Wert-Paare umdreht und stattdessen sortiert. Es gibt jedoch alternative Techniken, die einen saubereren und vielseitigeren Ansatz bieten können.
Umdrehen der Paare
Der folgende Codeausschnitt zeigt, wie die Schlüssel-Wert-Paare umgedreht werden in einer std::map, um eine neue Multimap zu erstellen, sortiert nach Wert:
template<typename A, typename B> std::pair<B,A> flip_pair(const std::pair<A,B> &p) { return std::pair<B,A>(p.second, p.first); } 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; }
Durch Aufruf von flip_map auf dem Original std::map können Sie eine nach Wert sortierte Multimap erhalten.
Generische assoziative Quelle
Dieser Ansatz kann verallgemeinert werden, um assoziative Container beliebiger Art mithilfe variadischer Vorlagen umzudrehen :
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 generische Überladung funktioniert mit jedem assoziativen Container, der den std::transform-Algorithmus unterstützt, einschließlich std::map und std::unordered_map.
Das obige ist der detaillierte Inhalt vonWie sortiere ich eine std::map effizient nach Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!