问题描述
如何在此处获得第二张地图的参考?我希望能够通过使用items.erase()删除元素。在下面的示例中,主映射中的元素数量没有改变,仅改变了副本。请仅使用C ++ 98。
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<int,map<int,string> > acks;
acks[10].insert(make_pair(1,"a"));
acks[10].insert(make_pair(2,"b"));
acks[10].insert(make_pair(3,"c"));
acks[20].insert(make_pair(11,"b"));
acks[20].insert(make_pair(12,"c"));
map<int,string> >::const_iterator it = acks.find(10);
if (it != acks.end())
{
map<int,string> items = it->second;
map<int,string>::const_iterator it2 = items.find(3);
cout << "size before: " << acks[10].size() << endl;
items.erase(it2);
cout << "size after: " << acks[10].size() << endl;
}
}
解决方法
复制发生在这里
map<int,string> items = it->second;
所以只需将其更改为参考
map<int,string>& items = it->second;
我认为您也需要更改
map<int,map<int,string> >::const_iterator it = acks.find(10);
到
map<int,string> >::iterator it = acks.find(10);