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!