Maison > développement back-end > C++ > Comment puis-je trier un std::map par valeur plutôt que par clé ?

Comment puis-je trier un std::map par valeur plutôt que par clé ?

DDD
Libérer: 2024-12-25 05:22:13
original
333 Les gens l'ont consulté

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

Trier un std::map par valeur

Trier un std::map par valeur plutôt que par clé peut être plus complexe que le tri par clé. Voici une analyse approfondie du problème et une solution :

Solution 1 : Utiliser une Multimap

Pour trier une std::map par valeur, nous pouvons créer une multimap avec les valeurs comme clés et les clés comme valeurs. Cela nous permet de trier par valeurs, comme dans l'exemple suivant :

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;
}
Copier après la connexion

En parcourant la carte d'origine et en insérant les paires inversées dans la multicarte, nous inversons essentiellement la relation clé-valeur et pouvons ensuite trier selon les nouvelles clés (les valeurs d'origine).

Solution 2 : Source Associative Générique (C 11 Obligatoire)

Pour les conteneurs associatifs alternatifs (par exemple, std::unordered_map), nous pouvons utiliser la solution générique suivante :

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;
}
Copier après la connexion

Cette surcharge fonctionne à la fois pour std::map et std::unordered_map en utilisant des modèles variadiques pour gérer différents types de conteneurs associatifs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal