C++中map 赋值的问题
代码如下
#include <map>
typedef std::map<int,int> rqInfo;
int main()
{
rqInfo Map;
Map.insert(rqInfo::value_type(1,10));
Map.insert(rqInfo::value_type(2,20));
Map.insert(rqInfo::value_type(3,30));
rqInfo rqinfomap;
rqinfomap = Map;
rqInfo::iterator Iterator;
for(Iterator = Map.begin();Iterator!=Map.end();Iterator++)
{
printf("index = %d \n",Iterator->second);
if(Iterator->first == 2)
{
rqinfomap.erase(Iterator);
}
}
}
为什么这样操作会有问题呢
两个map不能做相等操作 rqinfomap = Map;?
[解决办法]
=没有问题,问题在于两个map的迭代器不能共用,所以rqinfomap.erase(Iterator);
应该改为Map;或者将迭代器改为rqinfomap的迭代器。
其次就是erase删除操作会使迭代器失效,所以后边使用迭代器会有问题,可以在删除后将迭代器重新复位Iterator = Map.begin();
[解决办法]
rqinfomap.erase(Iterator);
删除的时候容器必须对应迭代器,你这里的 Iterator 是 Map 的,但却用它来删除 rqinfomap 的元素,虽然后者是前者的复制,但也会出问题。另外循环中 erase 的话,迭代器会出问题,应该这样弄。
for(Iterator = Map.begin();Iterator!=Map.end();)
{
if(Iterator->first == 2)
{
Iterator = Map.erase(Iterator);
}
else
{
++Iterator;
}
}
[解决办法]
rqinfomap = Map;这样做是没有问题的,问题主要出在 rqinfomap.erase(Iterator);
Iterator这个迭代器指向的是Map的元素所在的内存地址,执行rqinfomap.erase(Iterator)肯定会异常,迭代器超出范围了;