Streams library具有整齐的map
函数,可通过成员函数查看范围。 Range-V3中有任何等效视图吗?
view::transform
会是唯一的选择吗?
答案 0 :(得分:7)
文章的例子:
std::vector widgets = /* ... */
std::set ids = stream::MakeStream::from(widgets)
.map(&Widget::getId)
.to_set();
范围-v3中的(忽略std::vector
和std::set
的缺失模板参数)将是:
std::vector<Widget> widgets = // ...
std::set<Widget::ID> ids = widgets | ranges::view::transform(&Widget::getId);
是的,transform
相当于Streams中的map
。
range-v3中的所有算法都接受Invokable Projections,允许算法在转换的基础上选择范围元素,但仍然对整个元素进行操作。例如,我们可以按照其ID分类Widget
:
widgets |= ranges::action::sort(std::greater<Widget::ID>{}, &Widget::getId);