C++17 使用 find_if 的执行策略

问题描述 投票:0回答:1

我在向量上使用 std::find_if 。我只对满足谓词的元素的存在感兴趣。 Vector中有多个满足谓词的元素。我尝试过不使用和使用执行策略 par 和 par_unseq,但结果始终相同。每次它都会返回满足谓词的第一个元素。 那么为什么我们有 find_if 的执行策略,如果它只需要搜索顺序方式,即使在这种情况下 par 和 par_unseq 将如何提高性能。

c++ stl c++17 c++20
1个回答
0
投票

免责声明:我不知道实际的库实现。

如果您使用

std::find_if
,则表明您希望第一个条目满足谓词。这样,您可以通过在循环中执行“find_if”来查找所有条目。如果您并行工作,它可以将范围分成多个部分,因此在找到匹配项之前需要迭代的条目较少,但它必须等待第一个具有匹配项的部分才能给出结果,并且该结果应该永远都是一样的。请注意,如果匹配位于第一个条目,则根据实际实现,并行搜索很可能会变慢。

您可以使用

std::copy_if
或将
ranges
std::ranges::filter_view
一起使用来获取某个范围内的所有匹配条目。

© www.soinside.com 2019 - 2024. All rights reserved.