首页 >后端开发 >C++ >为什么我的自定义 `std::set` 比较器会导致类型不匹配错误?

为什么我的自定义 `std::set` 比较器会导致类型不匹配错误?

Susan Sarandon
Susan Sarandon原创
2024-12-23 14:11:17897浏览

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

错误:自定义 std::set 比较器定义中的类型不匹配

在您的代码中,您尝试指定一个自定义比较器函数来对 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn