web-dev-qa-db-ja.com

std :: copyを使用して1つのマップを別のマップにコピーするにはどうすればよいですか?

Std :: mapのコンテンツを別の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;
}

copym2.begin()operator*を呼び出して「逆参照」して値を割り当てるため、これは機能しません(すべての値はstd::pair<const int, double>タイプです)。次に、operator++を呼び出して、m2の次のスペースに移動します。 const intconstが原因で、これらの操作はどちらも機能せず、新しい要素用に予約されているスペースがありません。

std::copyで動作させる方法はありますか?

ありがとう!

20
Frank

GManの回答を使用できます---しかし、問題は、whyを使用したいですかstd::copy?メンバー関数 std::map<k, v>::insert 代わりに。

m2.insert(m1.begin(), m1.end());
73
Billy ONeal

イテレータを挿入 のバリアントが必要です:

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

inserter は_<iterator>_で定義されています。 (したがってm2.end())に挿入する場所が必要であり、 _insert_iterator_ を返します。

21
GManNickG