[英]Why can't a range be sorted in range-v3?
使用 Range-v3(0.10.0 版)库,我试图从 std::vector 构造一个范围,将其转换为另一个范围,最后对该范围进行排序。 我预计排序步骤会产生另一个我可以稍后使用的范围。 但我能想到的最好的是:
std::vector<std::string> const input { "2", "3", "1" };
using namespace ranges;
std::vector<int> output = input
| views::transform([](std::string s) { return std::stoi(s); })
| to<std::vector>()
| actions::sort
注意在转换步骤之后和排序步骤之前使用to<std::vector>()
。 当我想要的只是对转换步骤产生的范围进行排序时,这似乎分配了一个新的std::vector
。
为什么没有view::sort
? 它非常适合上述范围的组成。
转换后的范围只是一个视图,在迭代视图时一次生成一个元素。 它无法排序,因为无处可存储已排序的元素。 假设的实现也将是低效的,因为每次需要对排序进行比较时,它都必须转换每个元素。
您的解决方案是将转换后的元素存储在向量中然后对它们进行排序是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.