C++ 使用<;可以使用映射覆盖映射;算法>;?

C++ 使用<;可以使用映射覆盖映射;算法>;?,c++,dictionary,stl,copy,transform,C++,Dictionary,Stl,Copy,Transform,我想做以下几件事,但似乎不可能。我不是STL方面的专家 typedef std::map<int,int> CMap; CMap m1; m1[0] = 10; m1[1] = 11; m1[2] = 12; CMap m2; m2[20] = 30; m2[21] = 31; m2[22] = 32; std::copy( m1.begin(), m1.end(), m2.begin() ); typedef标准::映射CMap; CMap-m1; m1[0]=10; m1

我想做以下几件事,但似乎不可能。我不是STL方面的专家

typedef std::map<int,int> CMap;

CMap m1;
m1[0] = 10;
m1[1] = 11;
m1[2] = 12;

CMap m2;
m2[20] = 30;
m2[21] = 31;
m2[22] = 32;

std::copy( m1.begin(), m1.end(), m2.begin() );
typedef标准::映射CMap;
CMap-m1;
m1[0]=10;
m1[1]=11;
m1[2]=12;
CMap-m2;
m2[20]=30;
m2[21]=31;
m2[22]=32;
std::copy(m1.begin(),m1.end(),m2.begin());
有没有一种方法可以使用算法(C++98)来实现这一点?可以用transform()或replace()完成吗?如果是,如何进行

谢谢

您可以这样做:

m2 = m1;
如果你愿意,甚至可以这样:

m2.swap(m1);
还有一点:

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

复制品?也许你可以用它来做最后一次辩论?@Morb:谢谢。insert()当然是可能的。我想知道是否也可以用算法来做同样的事情。@Joachim:谢谢。这是我没有考虑的一种方式。事实上,我没有具体说明我想做什么。我希望m2被m1覆盖。这也可能吗?最好在问题本身中澄清一下。谢谢你的回答。前两个覆盖,这很好,但第三个将只是附加,因为我理解。有没有使用copy()覆盖的方法?@Lorenz如果您创建了自己的
迭代器,则可以使用
std::copy()
覆盖,因为
std::insert\u迭代器只有在没有值时才会插入。TBH您也可以编写一个循环,因为任何方法都至少需要您编写一个函子。如果你有
C++11
一个简单的基于范围的for循环就可以了:
for(auto&&p:m1)m2[p.first]=p.second谢谢你的回答。没有考虑到编写特定迭代器的可能性。现在清楚了。