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!