Как может я копировать одну карту в другой станд. использования:: копия?

Я хотел бы скопировать содержание одного станд.:: карта в другого. Я могу использовать 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?

Спасибо!

19
задан Frank 1 May 2010 в 11:24
поделиться

2 ответа

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

m2.insert(m1.begin(), m1.end());
74
ответ дан 30 November 2019 в 01:47
поделиться

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

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

средство вставки определено в . Ему требуется место для вставки (отсюда m2.end () ), и он возвращает insert_iterator .

22
ответ дан 30 November 2019 в 01:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: