Информация об изменениях

Сообщение range-v3 и модный C++ от 25.07.2020 4:11

Изменено 25.07.2020 4:13 kaa.python

range-v3 и модный C++
В последние годы комитет пытается угодить всем, вот и за функциональный стиль плотно взялись, на что нам range-v3 как бы и намекает. Я тут решил попробовать написать с использованием этой библиотеки простой тестик, пока что по ощущениям выходит что нахер это надо, утомительно ребусы компилятора разгадывать пытаясь угодать что же пошло не так. Но может кто знает как заставить эту штуку работать?

Хочу совсем простого, есть массив массивов, его надо объеденит в один, выкинуть дубликаты, отсортировать, и взять 3 минимамльных элемента. Само собой всё надо сделать максимально приближено к функциональному стилю.

Хочу простого, для иллюстрации пример на Clojure, где такое можно сделать красиво и элегантно:

(def v1 (list (list 3 4 5 1 7)
              (list 1 3 6 3 8)))

(-> v1
    flatten
    distinct
    sort
    (#(take 3 %)))


Пока что у меня на C++ вышла вот такая хреновина, которая, почему-то, отказывается убирать дубликаты

std::vector<std::vector<size_t>> v1 = { { 3, 4, 5, 1, 7 }, { 1, 3, 6, 3, 8 } };

std::vector<size_t> joined = v1 | ranges::views::join | ranges::views::unique |
                                 ranges::to<std::vector<size_t>> | ranges::actions::sort;
std::vector<size_t> res( joined.begin(), joined.begin() + 3 );


Но хочется без разбиения на 3 этапа и, конечно же, без дубликатов
range-v3 и модный C++
В последние годы комитет пытается угодить всем, вот и за функциональный стиль плотно взялись, на что нам range-v3 как бы и намекает. Я тут решил попробовать написать с использованием этой библиотеки простой тестик, пока что по ощущениям выходит что нахер это надо, утомительно ребусы компилятора разгадывать пытаясь угодать что же пошло не так. Но может кто знает как заставить эту штуку работать?

Хочу совсем простого, есть массив массивов, его надо объеденит в один, выкинуть дубликаты, отсортировать, и взять 3 минимамльных элемента. Само собой всё надо сделать максимально приближено к функциональному стилю.

Хочу простого, для иллюстрации пример на Clojure, где такое можно сделать красиво и элегантно:

(def v1 (list (list 3 4 5 1 7)
              (list 1 3 6 3 8)))

(-> v1
    flatten
    distinct
    sort
    (#(take 3 %)))


Пока что у меня на C++ вышла вот такая хреновина, которая, почему-то, отказывается убирать дубликаты

std::vector<std::vector<size_t>> v1 = { { 3, 4, 5, 1, 7 }, { 1, 3, 6, 3, 8 } };

std::vector<size_t> joined = v1 | ranges::views::join | ranges::views::unique |
                                 ranges::to<std::vector<size_t>> | ranges::actions::sort;
std::vector<size_t> res( joined.begin(), joined.begin() + 3 );


Но хочется без разбиения на 2 этапа и, конечно же, без дубликатов