Могу ли я скопировать в Мультикарту


Дано istream_iterator<int> и multimap<char, int> output.

Я хочу скопировать все значения в output ключ 'a'. Как лучше всего с этим справиться?

Я пытался использовать:

transform(
    istream_iterator<int>(input),
    istream_iterator<int>(),
    begin(output),
    [](const auto value){
        return make_pair('a', value);
    }
)

Но я получаю ошибку:

Ошибка: назначение элемента только для чтения std::pair<const char, int>::first

Я думаю, это означает, что я не могу писать begin(output). Является ли мой единственный вариант использовать for_each?
1 3

1 ответ:

Вы очень близки, но вы должны использовать std::inserter:

transform(
    istream_iterator<int>(input),
    istream_iterator<int>(), 
    inserter(output, begin(output)),
    [](const auto value){
        return make_pair('a', value);
    }
);

Второй параметр является подсказкой, но для multimap он будет проигнорирован. Однако интерфейс требует, чтобы вы его предоставили.