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;
}
copy
がm2.begin()
でoperator*
を呼び出して「逆参照」して値を割り当てるため、これは機能しません(すべての値はstd::pair<const int, double>
タイプです)。次に、operator++
を呼び出して、m2
の次のスペースに移動します。 const int
のconst
が原因で、これらの操作はどちらも機能せず、新しい要素用に予約されているスペースがありません。
std::copy
で動作させる方法はありますか?
ありがとう!
GManの回答を使用できます---しかし、問題は、whyを使用したいですかstd::copy
?メンバー関数 std::map<k, v>::insert
代わりに。
m2.insert(m1.begin(), m1.end());
イテレータを挿入 のバリアントが必要です:
_std::copy(m1.begin(), m1.end(), std::inserter(m2, m2.end()) );
_
inserter
は_<iterator>
_で定義されています。 (したがってm2.end()
)に挿入する場所が必要であり、 _insert_iterator
_ を返します。