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

Comment puis-je trier un std::map par valeur et non par clé ?

Mary-Kate Olsen
Libérer: 2024-12-05 10:33:10
original
703 Les gens l'ont consulté

How Can I Sort a std::map by Value, Not Key?

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

Utilisation :

Après avoir créé la carte originale (par exemple, std::map src), retournez simplement la carte pour trier par valeur :

std::multimap<double, int> dst = flip_map(src);
Copier après la connexion

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal