如何解决C++20 范围是否具有过滤器或 any_of 的值非谓词版本?
经典 C++ 有时为谓词算法选择 _if 后缀(而不是取值的算法),例如find_if
/find
count_if
/count
有时它会 not(例如 any_of
虽然它需要谓词但没有 _if 后缀,并且没有算法的 any_of
值版本)。
据我所知,C++20 filter
或 ranges::any_of
没有值重载。
我浏览了 C++20 的整个 cppreference 页面并没有发现任何东西,我认为这只是因为 C++20 范围库非常有限(只有很少的视图)并且它与现有功能匹配(在 { 的情况下) {1}})。
any_of
解决方法
C++20 范围是否具有过滤器或 any_of 的值(非谓词)版本?
没有
但是写起来很容易:
std::ranges::any_of(r,[&](auto const& e){ return e == value; })
或者,如果认为时间太长,您可以添加一个助手:
inline constexpr auto equals = [](auto const& value){
return [=](auto const& e){ return e == value; };
};
您可以使用它来缩短 any_of
调用:
std::ranges::any_of(r,equals(value));
或者您可以使用任意数量的库来编写占位符-lambda,最近使用的是Boost.Lambda2:
std::ranges::any_of(r,_1 == value);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。