我想在将范围传递到动作或视图之前应用投影。考虑以下示例:
#include <iostream>
#include <range/v3/view/map.hpp>
#include <range/v3/action/sort.hpp>
#include <range/v3/algorithm/for_each.hpp>
int main()
{
std::vector<std::string> strings{"1.2","100.2","11.2","0.2","2.2"};
ranges::for_each(strings, [](const auto& str) { std::cout << str << std::endl; });
strings | ranges::views::all | ranges::actions::sort;
std::cout << std::endl;
ranges::for_each(strings, [](const auto& str) { std::cout << str << std::endl; });
return 0;
}
假设我希望在排序之前将字符串转换为双精度。使用函数式方法,这是可能的:
strings |= ranges::actions::sort(std::less{}, [](const auto& str) { return std::stod(str); });
但是我想知道是否有一种管道格式允许这样做,它将这个投影应用于所有以下操作,例如:
strings | ranges::views::projection([](const auto&str ) { return std::stod(str); }) | ranges::actions::sort;
请注意, usingranges::views::transform不起作用,因为它会创建一个新范围而不是投影。
我也不确定range-v3 文档中是否推荐使用strings | ranges::views::all | ranges::actions::sort而不是使用警告。strings |= ranges::actions::sort