【发布时间】:2018-10-26 00:38:25
【问题描述】:
我怎样才能展平下面的字典-
输入:
dict = {
"Key1" : "1",
"Key2" : {
"a" : "2",
"b" : "3",
"c" : {
"d" : "3",
"e" : {
"" : "1"
}
}
}
}
输出:
{
"Key1" : "1",
"Key2.a" : "2",
"Key2.b" : "3",
"Key2.c.d" : "3",
"Key2.c.e" : "1"
}
输入映射的数据类型是map<string, void*>
预期的输出映射为map<string,string>
【问题讨论】:
-
首先不要使用
void*。您无法使用这些指针指向的对象。 -
输入是分层的,输入map的类型怎么可能是
map<string, void*>呢?请发布一些 C++ 代码。 -
@HajoKirchhoff
map类模板不是分层的。如果她想分层定义输入,则需要“下一个指针”。这可以指向"Key1"处的数据或"Key2"处的下一个节点。不过,C++ 中有更好的方法来实现这一点。 -
@harper:这正是我的观点。地图不是分层的。那么输入映射的数据类型怎么可能是 map
? -
拥有 void* 的目的是它可以是字符串或另一个映射。这就是可以创建层次结构的方式。我相信我们可以使用 typeid 运算符来获取类型。如果它是一个字符串,那么我们只需打印它,如果它是一个映射,则使用 static_cast 将 void* 强制转换为该映射,然后递归调用相同的函数。这个问题实际上是在一个黑客队伍中被问到接受采访的。无法更改函数声明。
标签: c++ dictionary stdmap flatten