In Ihrem Code versuchen Sie, eine benutzerdefinierte Komparatorfunktion zum Sortieren von Elementen in einem std anzugeben ::set unter Verwendung der lexikografischen Reihenfolge anstelle der numerischen Reihenfolge. Die Fehlermeldung weist jedoch darauf hin, dass in der Deklaration Ihres benutzerdefinierten Komparators ein Typkonflikt vorliegt.
Das Problem entsteht, weil Sie lex_compare als Funktion mit zwei int64_t-Parametern deklarieren, die einen booleschen Wert zurückgibt. Allerdings erwartet die Vorlage für std::set einen Komparator, der die Funktion std::less<> implementiert. Vorlage. std::less<> ist ein Funktionsobjekt mit der folgenden Signatur:
template <typename T> struct less { bool operator()(const T& a, const T& b) const; };
Um dieses Problem zu beheben, müssen Sie lex_compare implementieren, um dem Standard std::less<> zu entsprechen. Unterschrift. Hier ist eine Änderung an Ihrem 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;
Jetzt implementiert die lex_compare-Struktur die Funktion „operator()“, die zwei int64_t-Argumente akzeptiert und einen booleschen Wert zurückgibt, der mit der Signatur von std::less<> übereinstimmt. . Durch die Angabe dieses benutzerdefinierten Komparators in der Definition Ihres std::set können Sie das Sortierverhalten des Sets ändern, um Elemente lexikografisch zu sortieren.
Das obige ist der detaillierte Inhalt vonWarum verursacht mein benutzerdefinierter „std::set'-Komparator einen Typkonfliktfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!