Maison > développement back-end > C++ > Pourquoi mon comparateur `std::set` personnalisé provoque-t-il une erreur d'incompatibilité de type ?

Pourquoi mon comparateur `std::set` personnalisé provoque-t-il une erreur d'incompatibilité de type ?

Susan Sarandon
Libérer: 2024-12-23 14:11:17
original
909 Les gens l'ont consulté

Why Does My Custom `std::set` Comparator Cause a Type Mismatch Error?

Erreur : type incompatible dans la définition de comparateur std::set personnalisée

Dans votre code, vous essayez de spécifier une fonction de comparateur personnalisée pour trier les éléments dans un std ::défini en utilisant l'ordre lexicographique au lieu de l'ordre numérique. Cependant, le message d'erreur indique qu'il y a une erreur de non-concordance de type dans la déclaration de votre comparateur personnalisé.

Le problème survient parce que vous déclarez lex_compare comme une fonction avec deux paramètres int64_t qui renvoie une valeur booléenne. Cependant, le modèle pour std::set attend un comparateur qui implémente le std::less<> modèle. std::moins<> est un objet fonction avec la signature suivante :

template <typename T>
struct less {
  bool operator()(const T& a, const T& b) const;
};
Copier après la connexion

Pour résoudre ce problème, vous devez implémenter lex_compare pour vous conformer au std::less<> signature. Voici une modification de votre code :

struct lex_compare {
  bool operator()(const int64_t& a, const int64_t& b) const {
    stringstream s1, s2;
    s1 << a;
    s2 << b;
    return s1.str() < s2.str();
  }
};

std::set<int64_t, lex_compare> s;
Copier après la connexion

Maintenant, la structure lex_compare implémente la fonction Operator() qui prend deux arguments int64_t et renvoie une valeur booléenne, qui correspond à la signature de std::less<> . En spécifiant ce comparateur personnalisé dans la définition de votre std::set, vous pouvez modifier le comportement de classement de l'ensemble pour trier les éléments de manière lexicographique.

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