【发布时间】:2021-10-11 06:35:01
【问题描述】:
在将m2 的元素添加到m1 时,如果m1 和m2 具有相同的键,我尝试删除m2 对。如果没有const,它可以正常工作,但由于有const,它无法访问。请让我知道问题所在。
void mergeContainers(map<int, int>& container1, const map<int, int>& container2)
{
for (map<int, int>::iterator it1 = container1.begin(); it1 != container1.end(); it1++)
{
for (map<int, int>::iterator it2 = container2.begin(); it2 != container2.end(); it2++)
{
if (it1->first == it2->first)
{
container2.erase(it2);
}
}
}
container1.insert(container2.begin(), container2.end());
}
【问题讨论】:
-
如果
container2是const,您将无法调用container2.erase(it2)。那就是修改container2,句号。 -
旁注:使用auto 和range-based-for 可以大大简化代码。
-
您还需要小心循环,在循环中迭代容器时会对其进行变异。在
map的情况下erase不会做诸如使过去的迭代器无效之类的事情,但总的来说这是一种危险的做法。您可以将整个内部循环替换为container2.erase(it1->first);。 -
改为 ... if (it1->first != it2->first) { container1.insert(*it2); }
-
感谢所有回答!由于我是一个不会说英语的人,我的英语一定很差。我只是误解了作业