经典 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 范围库非常有限(只有几个 View )并且它匹配现有功能(如果 any_of
).
我最好的尝试是只包装逻辑并给它一个新名称。
template <typename Range, typename Value>
static bool contains(const Range& range, const Value& value)
{
return std::ranges::find(range, value) != range.end();
}
最佳答案
Do C++20 ranges have value(not predicate) version of filter or 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);
https://stackoverflow.com/questions/67695084/
相关文章:
python - Groupby 在 pandas 中求和并根据条件/要求自定义 df
haskell - 如何在高阶函数haskell中使用Maybe?
c# - 为什么 TextInfo.ToTitleCase 在字母全部为大写的字符串上不能正常工作?
python - 断言错误 : Wrong values for d ['w' ] | deeple
javascript - 为什么减少数组的长度会使最后一个元素未定义但长度不变?
nuget - Cake NuGetRestore 找不到 nuget.exe