如何解决无法满足范围的约束 ::count()
我正在研究范围函数。
struct User
{
std::string name;
int age;
std::string gender;
template<class Os> friend
Os& operator<<(Os& os,User const& u)
{
return os << "\n" << std::right << std::setw(10)
<< u.name << " - " << u.age << "," << u.gender;
}
};
std::vector<User> users = {
{"Dorothy",59,"F"},{"Allan",60,"M"},{"Kenny",33,{"Jaye",30,"F"}
};
int main()
{
std::cout << "Count of M users: " <<
std::ranges::count_if(users,[](const User& u) {return u.gender == "M"; }) <<
std::endl;
const User match { "Ed",44,"M" };
std::cout << "Count of Ed users: " <<
std::ranges::count(users,match) <<
std::endl;
}
count_if 按预期运行。计数表达式在 MSVS 2019 中生成错误。
错误 C7602 'std::ranges::_Count_fn::operator ()': 不满足关联的约束 D:\Test\Code\Ranges\Ranges.cpp
并将我指向 std 算法标头。我显然不理解indirect_binary_predicate,它是为计数函数列出的唯一约束。阅读 cppreference.com 是...没有帮助:-)。
我在这里遗漏了什么?
解决方法
在 std::ranges::count_if
中,您提供了一个自定义比较器。但是,在 std::ranges::count
中,您尝试使用默认比较,但没有使用。
您需要提供这一点,并且假设您想要对结构成员进行逐成员比较,您可以简单地添加:
auto operator<=>(User const &) const = default;
到你的结构。
如果您想要不同类型的比较,您必须指定它而不是使用 = default
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。