Почти.Функтор должен быть бинарным оператором, принимающим тип возвращаемого значения в качестве первого и тип диапазона в качестве второго аргумента:
x = Functor(init, *it++);
x = Functor(x, *it++);
x = Functor(x, *it++);
// ... until it == end
Так что вам вообще не нужен функтор с состоянием, простая функция будет делать:
int map_acc(int lhs, const std::pair<int, int> & rhs)
{
return lhs + rhs.second;
}
const int sum = std::accumulate(m.begin(), m.end(), 0, map_acc);