Подтвердить что ты не робот

Как скопировать одну карту в другую с помощью std:: copy?

Я хотел бы скопировать содержимое одной std:: map в другую. Могу ли я использовать std::copy для этого? Очевидно, что следующий код не будет работать:

int main() {
  typedef std::map<int,double> Map;
  Map m1;
  m1[3] = 0.3;
  m1[5] = 0.5;
  Map m2;
  m2[1] = 0.1;
  std::copy(m1.begin(), m1.end(), m2.begin());
  return 0;
}

Это не сработает, потому что copy вызовет operator* на m2.begin() на "разыменовать" его и назначит значение (все значения имеют тип std::pair<const int, double>). Затем он вызовет operator++, чтобы перейти к следующему пространству в m2. Обе эти операции не работают из-за const в const int, и для каких-либо новых элементов не остается места.

Есть ли способ заставить его работать с std::copy?

Спасибо!

4b9b3361

Ответ 1

Вы можете использовать ответ GMan --- но вопрос в том, почему вы хотите использовать std::copy? Вместо этого вы должны использовать функцию-член std::map<k, v>::insert.

m2.insert(m1.begin(), m1.end());

Ответ 2

Вам нужен вариант вставить итератор:

std::copy(m1.begin(), m1.end(), std::inserter(m2, m2.end()) );

inserter определяется в <iterator>. Для этого требуется место для вставки (следовательно, m2.end()) и возвращает insert_iterator.