С учетом istream_iterator<int>
и multimap<char, int> output
.Могу ли я копировать в multimap
Я хочу скопировать все значения в output
'a'
ключ. Как лучший способ справиться с этим?
я пытался использовать:
transform(
istream_iterator<int>(input),
istream_iterator<int>(),
begin(output),
[](const auto value){
return make_pair('a', value);
}
)
Но я получаю сообщение об ошибке:
error: assignment of read-only member
std::pair<const char, int>::first
Я думаю, что это означает, что я не могу писать begin(output)
. Могу ли я использовать только for_each
?
Это выходит за рамки оригинального вопроса, но почему 'multimap' предоставляет' begin', если я не могу его использовать? Почему бы не просто предоставить 'cbegin'? –
@JonathanMee вы можете использовать его, просто не в этой операции. Фактическим значением 'value_type' является' std :: pair ', и вы можете использовать' begin (m) 'для изменения значения. Вы не можете перезаписать ключ, потому что тогда вам придется прибегнуть к карте. Если вы посмотрите на 'std :: set', где есть только константный ключ, вы заметите, что он не предлагает неконстантный итератор. –
krzaq
Ах, вы говорите, что я могу изменить значение, возвращаемое 'multimap :: begin', но не ключ, что также означает, что я не могу назначить. Я понимаю, спасибо. Поэтому для продолжения этих вопросов, выходящих за рамки области, если 'output' уже имел содержимое, которое мне нужно было бы делать' inserter (output, inserter.lower_bound ('a')) ', это правильно? –