具有多个谓词的 C++11 算法
Posted
技术标签:
【中文标题】具有多个谓词的 C++11 算法【英文标题】:C++11 algorithms with multiple predicates 【发布时间】:2013-12-24 04:25:02 【问题描述】:std::find_if
等来自 algorithm
标头的函数非常有用,但对我来说有一个严重的限制,即每次调用 count_if
时我只能使用 1 个谓词。
例如,给定一个像std::vector
这样的容器,我想同时应用find_if
的相同迭代,多个谓词;标准库中有什么东西可以在保持这种功能性方法的同时实现这一点?
【问题讨论】:
【参考方案1】:只需将它们与 lambda 组合:
std::find_if(begin(vec), end(vec),
[](elem_t val)
return f1(val) || f2(val);
);
【讨论】:
哦,比我想象的要简单得多 但是使用这种方法,不同谓词的结果最终会出现在相同的输出中,如果我想将结果分派给每个谓词的特定对象怎么办? @user2485710 - 为此您编写自己的算法。 @user2485710:对于每个不同的目标使用std::copy_if
可能是最简单的,但这涉及到源容器的多次传递,因此使用for
循环和if (predicate1(val)) dest1.push_back(val); else if ...
可能更有效拉姆达。 (如果您关心性能,请始终以您的数据为基准。)
@user2485710:我不确定你的意思。什么输出?谓词的结果进入算法以决定要做什么。对于find_if
,这意味着如果结果为true
则终止,或者如果结果为false
则继续。你有一个具体的例子来说明你想做的事情吗?因为我可能有解决办法。以上是关于具有多个谓词的 C++11 算法的主要内容,如果未能解决你的问题,请参考以下文章