Предположим, у меня есть диапазон T, называемый rng. я могу сделать
auto groups = ranges::view::group_by(rng, bin_op);
группы теперь представляют собой диапазон диапазонов Т.
я тоже могу это сделать
auto groups = ranges::view::group_by(rng, bin_op) | ranges::to_vector;
чтобы получить вектор диапазонов Т. Однако это
auto groups = ranges::view::group_by(rng, bin_op)
| ranges::to_vector
| ranges::action::transform([] (auto r) { return r | ranges::to_vector; };
так же как
auto groups = ranges::view::group_by(rng, bin_op)
| ranges::to_vector
| ranges::action::transform([] (auto r) { return std::vector<T>{} | ranges::action::push_back; };
не будет работать, поскольку очевидно, что ranges::action::transform() возвращает void в этом случае, и «Тип результата функции, переданной action::transform, должен быть доступен для записи обратно в исходный диапазон».
Итак, как мне превратить мои диапазоны диапазонов в вектор векторов?
Примечание. Извините за неверные теги, но я не смог найти тег ranges/ranges-ts/ranges-v3, мне не разрешено его создавать и я не мог использовать его в заголовке.