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
Freigeben: 2024-12-05 10:33:10
Original
679 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage