gpt4 book ai didi

c++ - 在 getter 中对嵌套 getter 结果进行扁平化的最佳方法

转载 作者:太空狗 更新时间:2023-10-29 21:37:16 25 4
gpt4 key购买 nike

有时我的任务是查找 getter 返回的值中的某些嵌套 getter 是否具有某些属性。经典的 C++ 会是这样的:

for (const auto& label: labels) 
for (const auto& artist: label.artists())
if (artist.name = "Arcade Fire")
return true;
return false;

使用范围执行此操作的最佳方法是什么?我认为这样的事情可能会奏效:

 labels|  transform (&Label::artists) | join | transform(&Artist::name) | join | find_if_fn([](){/*...*/}) ;

但是它很长,(部分原因是您必须写 Class:member_fn 而不是 .member_fn。有没有更短的方法来做到这一点?

最佳答案

我认为:

using namespace ranges;
auto rng = labels | view::transform(&Label::artists) | view::join;
return find(rng, "Arcade Fire", &Artist::name) != end(rng);

以相当直接的方式完成工作。 view::filter 公式:

using namespace ranges;
auto rng = labels | view::transform(&Label::artists) | view::join |
view::filter([](const Artist& a){ return a.name() == "Arcade Fire"; });
return !empty(rng);

有点冗长,但可能具有相似的性能。如何从“Is there a foo?”中概括它也相当清楚。到“返回所有的 foos”。

关于c++ - 在 getter 中对嵌套 getter 结果进行扁平化的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38097685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com