C ++如何获取对嵌套映射的引用以删除元素?

问题描述

如何在此处获得第二张地图的参考?我希望能够通过使用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);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...