gpt4 book ai didi

c++ - 为什么 range-v3 中不能对范围进行排序?

转载 作者:行者123 更新时间:2023-12-02 03:28:39 24 4
gpt4 key购买 nike

使用 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 ?它非常适合上述范围的组成。

最佳答案

转换后的范围只是一个 View ,随着 View 的迭代,元素一次生成一个。它无法排序,因为没有地方可以存储已排序的元素。假设的实现也效率低下,因为每次需要进行排序比较时都必须转换每个元素。

您的解决方案是将转换后的元素存储在 vector 中然后对它们进行排序是正确的。

关于c++ - 为什么 range-v3 中不能对范围进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60338142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com