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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-05 10:33:10703Durchsuche

How Can I Sort a std::map by Value, Not Key?

Std::map nach Wert sortieren

Das Sortieren einer std::map nach Wert erfordert einen alternativen Ansatz zur Standardfunktion sort() Sortiert Elemente nur nach Schlüssel. Um dies zu erreichen, ziehen Sie die folgende Lösung in Betracht:

Schlüssel und Wert umdrehen

Erstellen Sie mit der folgenden Funktion eine neue Multimap, die die Schlüssel- und Wertepaare der ursprünglichen Karte umdreht :

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;
}

Verwendung:

Nach der Erstellung der Originalkarte (z. B. std::map src), drehen Sie einfach die Karte um, um nach Wert zu sortieren:

std::multimap<double, int> dst = flip_map(src);

Generische assoziative Quelle

Diese Lösung kann verallgemeinert werden, um mit jedem assoziativen Container mithilfe verschiedener Vorlagen zu arbeiten:

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;
}

Dies funktioniert für sowohl std::map als auch std::unordered_map als Quelle des Flip.

Das obige ist der detaillierte Inhalt vonWie kann ich eine std::map nach Wert und nicht 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