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
DDDoriginal
2024-11-30 19:01:121060parcourir

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

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

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!

Déclaration:
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