Как в C++ std::ranges построить карту на основе результата view::join?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как в C++ std::ranges построить карту на основе результата view::join?

Сообщение Anonymous »

Я использую GCC 14 в режиме C+23. В следующем коде я создаю представление представлений пар, которое затем выравниваю с помощью view::join и помещаю в вектор:

Код: Выделить всё

auto c = std::ranges::views::iota(1, 5)
| std::ranges::views::transform([](int const v){
return std::ranges::views::iota(1, 3)
| std::ranges::views::transform([v](int const w){
return std::make_pair(v, std::format("[{}/{}]", v, w));
});
})
| std::ranges::views::join
| std::ranges::to();
Результатом является вектор пар.
Теперь вместо вектора пар я хотел бы создать карту (или unordered_map ). Построение карты из ряда пар должно работать (как я узнал из своего старого вопроса). Но здесь это не компилируется:

Код: Выделить всё

auto c = std::ranges::views::iota(1, 5)
| std::ranges::views::transform([](int const v){
return std::ranges::views::iota(1, 3)
| std::ranges::views::transform([v](int const w){
return std::make_pair(v, std::format("[{}/{}]", v, w));
});
})
| std::ranges::views::join
| std::ranges::to();
К сожалению, вывод компилятора мне не очень понятен. Все, что я получил от него, это то, что он не может вызвать std::construct_at для создания узла карты, но я не могу многое понять из всех внутренних устройств стандартной библиотеки.
Использование только одного уровня «вложенных» диапазонов работает так, как ожидалось. Таким образом, эта проблема возникает только тогда, когда вложенные уровни диапазона объединяются и преобразуются в карту.
Как заставить второй код компилироваться и работать должным образом?

Подробнее здесь: https://stackoverflow.com/questions/787 ... oin-result
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»