Heim >Backend-Entwicklung >C++ >Wie kann ich eine std::map nach Wert statt nach Schlüssel sortieren?

Wie kann ich eine std::map nach Wert statt nach Schlüssel sortieren?

DDD
DDDOriginal
2024-12-25 05:22:13341Durchsuche

How Can I Sort an std::map by Value Instead of Key?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn