我用C++写了一个函数来检查std::set
中是否存在一个特定的值。函数如下:
bool check_if_any(set<int> &s, int x)
{
for (int i : s)
if (i == x)
return true;
return false;
}
我熟悉C#中的LINQ,其中相同的函数可以写得更简洁:
bool CheckIfAny(Set<int> s, int x)
{
return s.Any(i => i == x);
}
我想简化C函数,使其与C#版本一样短。
有人能告诉我如何使用 C 提供的功能重构C++函数吗?
2条答案
按热度按时间vtwuwzda1#
通常,要查找集合中的任何项是否与 predicate 匹配,可以使用
但在这个案子里
在速度和清晰度上都更好。
drkbr07n2#
要准确地找到这个值,你可以写这样的东西:
或者如果你想让它看起来更接近C#,并且可能想使用你自己的比较器,使用C++11 lambda和
std::find_if()
方法:这样你就可以让你自己的lambda函数来寻找特定的参数,而不仅仅是使用default comparable。请注意,第二个选项会更慢(线性),因为它必须遍历容器中的每个对象,并且不使用像BST或hashmaps这样的容器。