问题描述
经典 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);