Maison > développement back-end > C++ > Comment puis-je trier un std::map par valeur en C ?

Comment puis-je trier un std::map par valeur en C ?

DDD
Libérer: 2024-11-30 19:01:12
original
1044 Les gens l'ont consulté

How Can I Sort an std::map by Value in C  ?

Tri d'un std::map par valeur

Question : Comment puis-je trier sans effort un std::map en fonction de sa valeurs ?

Réponse :

Approche traditionnelle (avant C 11)

Avant l'introduction de C 11, le tri d'une carte par valeurs nécessitait une étape intermédiaire de conversion du std::map en std::pair. Cela impliquait l'utilisation d'une fonction de tri personnalisée et la spécification manuelle des paramètres de comparaison.

Approche C 11

Avec l'avènement du C 11, une solution plus propre a émergé. L'extrait de code suivant montre comment :

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

Cette fonction inverse efficacement les paires clé-valeur dans la carte, vous permettant de parcourir les valeurs triées.

Source associative générique (C 11 et supérieur)

Pour plus de flexibilité, une version générique de la fonction flipping peut être créée, lui permettant de fonctionner avec n'importe quel conteneur associatif :

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 fonction prend n'importe quelle classe de conteneur associatif en entrée, ce qui la rend pratique à utiliser à la fois avec std::map et std::unordered_map.

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