def recursiveDict():
return collections.defaultdict(recursiveDict)
# I can create a dictionary like the following
dic = recursiveDict()
dic['a'] = 1
dic['a']['a'] = 1
dic['a']['a']['a'] = 1
dic['a']['a']['a']['a'] = 1
and so on....
在用Python和其他动态语言工作了4年之后,我又回到了用C++工作。我希望能够使用unordered_map或map类创建一个递归嵌套列表(如上面的Python代码所示)。
我找不到办法去做那件事。
我想要实现的是键应该是char/string类型的,但是要插入的值应该是int类型的。
请告诉我这是怎么做的。
我最接近的是这个
struct CharMap {
std::unordered_map<char,CharMap> map;
} root_map;
and use it like
root_map.map['a'].map['b'];
但是我应该重载什么来获得上面的确切语法呢?
提前道谢。
既然您澄清了您熟悉运算符重载的基本概念,那么我将勾画出一个您可以遵循的实现此语法的基本蓝图。
您的容器将实现一个operator[]
重载,该重载返回一个helper对象。假设您的容器名为charmap
,并且在完成了所有操作之后,您的容器存储int
s。
class CharMap {
struct key {
key operator[](const std::string &);
operator int();
key &operator=(int n);
};
public:
key operator[](const std::string &);
};
例如,这将允许:
CharMap container;
container["A"]["B"]["C"]=5;
int n=container["D"]["E"]["F"};
charmap::operator[]
返回键
帮助器对象。该对象还实现它自己的运算符[]
重载,该重载返回另一个键
。最后,key
对象实现一个operator=
重载,以便您可以为它赋值,或者operatorint()
重载从容器返回一个值。
很明显,键
将在内部存储一个指向其来源的charmap
容器的指针,以便它可以更新或返回容器中的适当值。键
还在内部以零碎的方式跟踪用于创建它的所有键。charmap::key
在内部记录第一个字符串。然后,它的键::operator[]
返回另一个键
,该键在内部记录原始字符串和另一个字符串。
一旦调用operator[]
或operatorint()
中的任何一个,它们将使用所有累积的字符串来完成它们的工作,其形式或方式您需要弄清楚。
还有一些效率问题可能会得到解决,也可能不会得到解决。这种方法实现了您想要的语法,但是根据您的情况,它可能需要一些微调来优化底层实现,以消除大量的内部复制和重置。
此外,还需要一些额外的工作来实现正确的const
-正确性。但所有这些都只是实现细节,这就是如何实现这种访问由多个字符串索引的容器的语法。
问题内容: 我正在尝试从JSON对象动态构建表单,该对象包含表单元素的嵌套组: 我一直在使用ng-switch块,但是它与嵌套项变得站不住脚,就像上面的Address对象一样。 这是小提琴:http : //jsfiddle.net/hairgamiMaster/dZ4Rg/ 关于如何最好地解决此嵌套问题的任何想法?非常感谢! 问题答案: 我认为这可以为您提供帮助。它来自我在Google网上论坛上
问题内容: 我有一个方法必须执行以下操作: 我想指定嵌套的数量(在上述情况下,我希望嵌套15个)。这里有一种使用递归编程的方法吗? 问题答案: 是。这可以通过递归编程来执行。 我假设您不喜欢在源代码中写下这些嵌套的代码-如您的示例所示,因为这确实是丑陋的编程-如评论员所解释。 下面的代码(类似于Java的伪代码)对此进行了说明。我假设嵌套的深度固定。然后,您实际上想循环遍历尺寸深度的整数向量。 数
问题内容: 我有2个CSV文件:“数据”和“映射”: ‘映射’文件有4列:,,,和。填充所有四个列。 “数据”文件具有这些相同的列,其中填充了列,而其他三列为空白。 我希望我的Python代码来打开这两个文件并为每个数据文件,它的映射,以及从映射文件中值。 我知道只有2列存在时才需要使用dict(需要映射1列),但是当需要映射3列时我不知道如何实现。 以下是我尝试完成的映射的代码: 它返回。 经过
问题内容: 我将如何呈现一个带有嵌套项目的菜单,而该嵌套项目的子对象数量不明,如下面的示例所示,该对象的反应如何? 问题答案: Codesandbox示例 您只需要递归调用Menu组件,其子组件即可显示并作为数据道具传递。
我的数据结构如下所示: Foo的每个实例都可以包含任意数量的S,这当然反过来又可以包含更多的S等等。那么,我该如何让FreeMarker通过这样的列表呢?
问题内容: 说我要制作以下JSON 目前,这就是我实现的方式 似乎应该有一个更好的方法来做到这一点,而不是做更多的事情,然后将它们放置在主体中。有比我正在使用的方法更好的动态构建方法吗? 在此先感谢您的帮助! 问题答案: 如果您处理大量JSON数据,我真的建议您使用Gson或Jackson。这要方便得多,并且两个库都很好地支持与Java对象之间的相互转换(与通过JSONObjects手动构建JSO