Ответ 1
Вам не хватает const в первом типе пары.
[](std::pair<const std::string, std::string>& p) {
Однако это не ваша проблема: вы не можете использовать map
в качестве OutputIterator, так как они не поддерживают назначение. Вы можете, однако, изменить второй аргумент, используя std::for_each
.
Старый добрый map_to_foobar
:
std::for_each(data.begin(), data.end(),
[](std::pair<const std::string, std::string>& p) {
p.second = "foobar";
});
Концептуальные вещи: вызов transform
с тем же диапазоном, что и вход и выход, вполне закончен и имеет большой смысл, если все ваши функторы возвращаются по значению и не мутируют их аргументы. Тем не менее, мутация чего-то на месте может быть более быстрой (или, по крайней мере, выглядеть быстрее в коде, неважно оптимизирующий компилятор) и имеет большой смысл с функциями-членами.