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; };
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;
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!