Std :: уменьшить с помощью std :: Unoromeded_mapC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Std :: уменьшить с помощью std :: Unoromeded_map

Сообщение Anonymous »

У меня есть Unoromeded_map vectors , и я пытаюсь использовать std :: code , чтобы получить сумму всех значений во всех векторах на карте. Мой текущий функциональный код (который я хочу заменить) выглядит так: < /p>

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

// input is std::unordered_map
template
uint64_t get_map_sum(T& my_map)
{
uint64_t totalcount = 0;
for (auto& p : my_map)
{
for (const auto& q : p.second)
totalcount += q;
}
return total_count;
}
< /code>

Я бы хотел заменить это на std :: code>, чтобы использовать параллельное выполнение; Я думал, что это будет просто, так как мне нужно было заменить каждый цикл на вызов на STD :: CREAND 
, но это не работает. Моя попытка такова: < /p>

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

#include 
#include 
#include 
#include 
#include 
// reduces the vectors
template 
T get_vector_sum(Iter begin, Iter end, T initial = 0)
{
return std::reduce(std::execution::par_unseq, begin, end, initial,
[&](auto cur, auto prev) { return cur + prev; });
}

// calls get_vector_sum for all vectors and then reduces vector sums
template
uint64_t get_map_sum(Iter begin, Iter end)
{
return std::reduce(std::execution::par_unseq, begin, end, 0ULL,
[&](auto prev, auto cur)
{
return get_vector_sum(cur.begin(), cur.end(), prev);
//return get_vector_sum(cur.second.begin(), cur.second.end(), prev);
});
}
С приведенным выше кодом я получаю сообщение об ошибке, в которой говорится об ошибке C2039: 'begin': не является членом 'std :: pare' , ссылаясь на Auto cur в лямбде внутри get_map_sum . Первоначально я использовал cur в качестве std :: pare , но когда я это сделал, я получил другую ошибку, говоря об ошибке C2228: слева от '.second' должен иметь класс/struct/union .

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

int main()
{
std::unordered_map in({
{1, std::vector{1,2,3,4,5} },
{2, std::vector{1,2,3,4,5}},
{3, std::vector{1,2,3,4,5}}});

auto x = get_map_sum(in); // output 45
auto y = get_map_sum(in.begin(), in.end()); // error

return 0;
}
Можно ли использовать std :: code с такими картами, и, если да, то какие изменения мне нужно внести, чтобы это работало?

Подробнее здесь: https://stackoverflow.com/questions/550 ... rdered-map
Ответить

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

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

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

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

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