首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++如何获取对嵌套映射的引用,以删除元素?

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

Stack Overflow用户
提问于 2020-10-18 13:33:35
回答 1查看 122关注 0票数 0

我如何在这里获得对第二个地图的引用?我希望能够使用items.erase()来删除元素。在下面的示例中,主图中的元素数量并没有改变,它只改变了副本。请只使用C++ 98。

代码语言:javascript
复制
#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, 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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-18 13:35:11

复制发生在此处

代码语言:javascript
复制
 map<int, string> items = it->second;

所以只需将其更改为引用

代码语言:javascript
复制
 map<int, string>& items = it->second;

我想你也需要改变

代码语言:javascript
复制
map<int, map<int, string> >::const_iterator it = acks.find(10);

代码语言:javascript
复制
map<int, map<int, string> >::iterator it = acks.find(10);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64410059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档