Maison >développement back-end >C++ >Comment puis-je personnaliser le comparateur d'une carte en C pour trier les clés selon leur longueur ?

Comment puis-je personnaliser le comparateur d'une carte en C pour trier les clés selon leur longueur ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 08:02:02550parcourir

How can I customize the comparator for a map in C   to sort keys by their length?

Personnalisation des comparateurs pour les cartes

En C , std::map utilise un comparateur pour ordonner ses éléments. Par défaut, les cartes utilisent l'opérateur inférieur à (<) pour comparer les clés. Cependant, il est possible de remplacer ce comportement par défaut en fournissant un comparateur personnalisé.

Cette question explique comment personnaliser le comparateur d'une carte afin de trier les clés par longueur plutôt que par ordre alphabétique. Voici la solution :

Solution utilisant une classe personnalisée

std::map autorise jusqu'à quatre arguments de type modèle, le troisième étant un comparateur. Voici un exemple de classe personnalisée qui implémente un comparateur basé sur la longueur de la chaîne :

<code class="cpp">struct cmpByStringLength {
    bool operator()(const std::string& a, const std::string& b) const {
        return a.length() < b.length();
    }
};

Pour utiliser ce comparateur personnalisé, créez une carte avec les arguments de modèle suivants :

<code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap;</p>
<p><strong>Solution utilisant l'argument constructeur</strong></p>
<p>Vous pouvez également transmettre un comparateur au constructeur de la carte. Cette syntaxe est équivalente à l'exemple précédent :</p>
<pre class="brush:php;toolbar:false"><code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap(cmpByStringLength());</code>

Remarque : Lors d'une comparaison par longueur, une seule chaîne de chaque longueur peut être présente dans la carte en tant que clé.

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