使用 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
Run Code Online (Sandbox Code Playgroud)
注意在to<std::vector>()转换步骤之后和排序步骤之前的使用。std::vector当我想要的只是对转换步骤产生的范围进行排序时,这似乎分配了一个新的。
为什么没有view::sort?它非常适合上述范围的组成。
转换后的范围只是一个视图,在迭代视图时一次生成一个元素。它无法排序,因为无处可存储已排序的元素。假设的实现也将是低效的,因为每次需要对排序进行比较时,它都必须转换每个元素。
您的解决方案是将转换后的元素存储在向量中然后对它们进行排序是正确的。
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |