Как написать for_each parallel для std::map?

89
06 февраля 2021, 19:30

мне необходимо многопоточно обработать элементы std::map. c++ 17 для это есть for_each parallel, но я работаю на C++ 14. я написал такую функцию но он работает только с Forward итераторами.

template <typename It, typename Fn>
void parallel_for_each(It begin, It end, Fn&& function)
{
    const auto diff = std::distance(begin, end);
    constexpr auto num_threads = 8;
    std::vector<std::future<void>> fts;
    for (int i = 0; i < num_threads; ++i)
    {
        auto l = [&function](auto b, const auto thread_id, const auto n 
                        , const auto d)
    {
        std::for_each(b + (thread_id * d / n)
                        , b + ((thread_id + 1) * d / n), function);
    };
    fts.push_back(std::async(std::launch::async, l, begin, i, num_threads 
                        , diff));
    }
    for (auto& f : fts)
    {
        f.get();
    }
}

Прошу предложить оптимальное решение.

READ ALSO
Сортировка столбцов матрицы

Сортировка столбцов матрицы

Задание звучит так:

92
Выравнивание дивов

Выравнивание дивов

На странице нужно поместить два дива рядом в один контейнерКаждый див имеет фиксированную ширину, но правый див может скрываться и нужно,...

109
Получить html сайта

Получить html сайта

На Go написал функцию для того чтобы получать html сайтов по url:

104
Размер кнопки над ячейкой таблицы

Размер кнопки над ячейкой таблицы

Как задать кнопке такой же размер как и ячейке таблицы, но так, чтобы она изменяла свой размер при разных разрешениях монитора как и эта самая...

108