4

Streams 库有一个简洁的map功能,可以通过成员函数查看范围。Range-V3中是否有任何等效视图?

view::transform是唯一的选择吗?

4

1 回答 1

7

文章中的例子:

std::vector widgets = /* ... */    
std::set ids = stream::MakeStream::from(widgets)
         .map(&Widget::getId)
         .to_set();

std::vector(忽略和缺少的模板参数std::set)在 range-v3 中将是:

std::vector<Widget> widgets = // ...
std::set<Widget::ID> ids = widgets | ranges::view::transform(&Widget::getId);

transform的,相当于mapin Streams。

range-v3 中的所有算法都接受Invokable Projections,允许算法根据转换选择范围元素,但仍对整个元素进行操作。例如,我们可以Widget按它们的 ID 对 s 进行排序:

widgets |= ranges::action::sort(std::greater<Widget::ID>{}, &Widget::getId);
于 2015-03-18T03:11:06.330 回答