首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将unordered_map设置为unordered_map的值

将unordered_map设置为unordered_map的值
EN

Stack Overflow用户
提问于 2020-02-19 15:20:02
回答 1查看 237关注 0票数 2

因此,我试图将unordered_map设置为另一个unordered_map的值。现在,我遇到的问题是无法将值放入第二个unordered_map中。我的代码看起来是这样的。

代码语言:javascript
复制
  std::string postCode;
  std::string[] postCodeSource = new std::string{1111,2222,3333,4444};
  std::unordered_map<std::string,unordered_map<int,Foo*>*> data;
  int k1=1234;//can be any number
  for(int i = 0; i < 4; i++){
    postCode = postCodeSource[i]
    if(data[postCode]==NULL) {
      data[postCode]=new std::unordered_map<int,Foo*>();
    }
    data[postCode]->at(int(k1)) = new Foo(postCodeSource[i]);
  }

课程:

代码语言:javascript
复制
class Foo{
  public:
  Foo();
  Foo(std::string postCode);
  std::string firstName,Customername,postCode;
}

Foo(std::string postCode);是一个简单的复制构造函数。

现在,当我到达data[lastPlz.getString()]->at(int(k1.customer)) = new Foo(&k1);时,我从unordered_map得到了一个超出范围的异常,这是有意义的,因为k1还没有对象!在更改代码之前,我创建并填充了一个类似于此的指针。

代码语言:javascript
复制
std::unordered_map<int,Foo*> kdnrMap
kdnrMap[k1.customer] = new Foo(&k1);

后来,我将kdnrMap添加到data中。这将不再像我所想的那样工作,因为这个方法需要一个完全填充的kdnrMap,然后我才能将它添加到data中,这一点我不能再做了。

因此,我正在寻找帮助来填补kdnrMap,我已经尝试了很多我现在能想到的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 15:36:17

您实际上不需要将内部映射存储为指针。让外部地图拥有内部地图,就像这样:

代码语言:javascript
复制
std::unordered_map<std::string,
   std::unordered_map<int, std::unique_ptr<Foo>>> data;
data[postCode][int(k1.Kundennr)] = new Foo(&k1);

我建议不要在这里使用原始指针,因为如果替换内部映射中的值,内存泄漏的风险很高。使用std::unique_ptr使处理指针变得非常简单。

您的异常可能是因为unordered_map::at需要包含您所请求的键的值,以便检索对它正在映射的值的引用。如果您使用operator[],如我的示例所示,如果找不到该键,则映射将创建一个条目。

如果仍然坚持将外部映射的值作为指向内部映射的指针,则可以添加如下元素:

代码语言:javascript
复制
std::unordered_map<int, Foo*> &inner = *data[postCode];
inner[int(k1.Kundennr)] = new Foo(&k1);

代码语言:javascript
复制
data[postCode]->operator[](int(k1.Kundennr)) = new Foo(&k1);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60303584

复制
相关文章

相似问题

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