在您的代码中,您尝试指定一个自定义比较器函数来对 std 中的元素进行排序::使用字典顺序而不是数字顺序设置。但是,错误消息表明您的自定义比较器的声明中存在类型不匹配错误。
出现此问题的原因是您将 lex_compare 声明为带有两个返回布尔值的 int64_t 参数的函数。然而, std::set 的模板需要一个实现 std::less 的比较器。模板。 std::less是一个具有以下签名的函数对象:
template <typename T> struct less { bool operator()(const T& a, const T& b) const; };
要解决此问题,您需要实现 lex_compare 以符合 std::less ;签名。下面是对代码的修改:
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;
现在,lex_compare 结构实现了operator() 函数,该函数接受两个int64_t 参数并返回一个布尔值,该值与std::less
以上是为什么我的自定义 `std::set` 比较器会导致类型不匹配错误?的详细内容。更多信息请关注PHP中文网其他相关文章!