Tri std::map par valeur
Le tri d'un std::map par valeur nécessite une approche alternative à la fonction sort() standard trie uniquement les éléments par clé. Pour y parvenir, envisagez la solution suivante :
Flip Key and Value
Créez une nouvelle multimap qui inverse les paires clé et valeur de la carte d'origine à l'aide de la fonction suivante :
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; }
Utilisation :
Après avoir créé la carte originale (par exemple, std::map
std::multimap<double, int> dst = flip_map(src);
Source associative générique
Cette solution peut être généralisé pour fonctionner avec n'importe quel conteneur associatif à l'aide de modèles variadiques :
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; }
Cela fonctionne pour std::map et std::unordered_map comme source du flip.
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!