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
679 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!

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