请教一个c++ 中map无法删除的问题
请求高手指教,map中erase已经删除的项,在跳出if语句后竟然还存在,不晓得哪里出了问题。
代码是验证map中是否存在某项,如果存在,其值-1,如果其值变为了零,删除掉对应项。
代码如下:
if(e_viewermap.count(make_pair(ch,en)) > 0){
e_viewermap[make_pair(ch,en)]--;
if(e_viewermap[make_pair(ch,en)] == 0){
Viewermap::iterator itm;
itm=e_viewermap.find(make_pair(ch,en));
e_viewermap.erase(itm);
}
if(e_viewermap[make_pair(ch,en)] < 0){
cout<<"*** error: viewer_map less than 0 *** %s\n"<<endl;
system("pause");
exit(1);
}
} else {
cout<<"*** error: not exist in viewer_map*** %s\n"<<endl;
system("pause");
exit(1);
}
代码中Viewermap是 typedef map<pair<PChannel, ENCODING>, int> Viewermap 类型。 程序调试的时候单步执行发现,确实删除掉了需要删除的项,但是只要一跳出这个(最外层的)if语句,已经删除掉的项竟然还在。。。。。。请问这是什么原因呢?
谢谢!~
[解决办法]
容器传入的引用?