正在将无序映射设置为无序映射的值
Setting unordered_map as value for unordered_map
所以我试图将一个unordered_map设置为另一个unoddered_map的值。现在我遇到的问题是,我无法将值放入第二个无序映射中。我的代码看起来像这样。
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]);
}
类:
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.customer中还没有对象!在更改代码之前,我创建并填充了一个类似的指针。
std::unordered_map<int,Foo*> kdnrMap
kdnrMap[k1.customer] = new Foo(&k1);
稍后,我将kdnrMap添加到数据中。这将不再以我想要的方式工作,因为这个方法需要一个完全填充的kdnrMap,然后我才能将其添加到数据中,而我再也做不到了。
因此,我正在寻求帮助来填充kdnrMap。目前,我已经尝试了几乎所有我能想到的方法。
您实际上不需要将内部映射存储为指针。只需让外部地图拥有内部地图,如下所示:
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[]
,那么如果找不到键,映射将创建一个条目。
如果你仍然坚持让外部映射的值成为内部映射的指针,那么你可以添加这样的元素:
std::unordered_map<int, Foo*> &inner = *data[postCode];
inner[int(k1.Kundennr)] = new Foo(&k1);
或
data[postCode]->operator[](int(k1.Kundennr)) = new Foo(&k1);
相关文章:
- 递归无序映射
- 正在将无序映射设置为无序映射的值
- 智能指针作为无序映射键,并通过引用进行比较
- 打印无序映射的第二个元素,即集合
- 由并发无序映射查找线程调用的函数是否安全?
- 将大数字(10-12 位数字)存储在无序映射中<字符串,整数>
- 使用无序映射在STL中存储键值对
- 为C++中的无序映射获取给定输入键的错误值
- 将大型对象存储在无序映射中是否效率低下
- 在无序映射的结构化绑定中推导类型
- 使用无序映射进行错误索引
- 将一个向量对放在一个无序映射与一个映射中
- 如何在c++中修改无序映射中的每个值
- C++:使用一对(cpp_int,int)整数作为无序映射中的键(其中cpp_int是boost多精度整数)
- 将 [] 索引到无序映射时出现段错误
- 以std::字符串作为关键字,按字典顺序对一个无序映射进行排序
- 无序映射存储桶的节点大小
- 在无序映射<字符串上使用 find(),向量<string>>与 C++ 中的有序映射花费相同的时间
- 以三个无符号字符为关键字的无序映射
- 无序映射比c++中的映射慢吗