我需要一个能够存储嵌套数字列表的数据结构的高效C ++实现,例如:
0:
1:
3
4
7
5:
10
13
15
7:
2
1:
1:
2
3
6:
7
9
我希望能够以非常有效的方式遍历最深的元素,这样我就可以按照它们出现在嵌套列表中的顺序访问三个数字的集合:
(0,1,3)
(0,1,4)
(0,5,10)
...
我还希望通过传递一组三个数字并将相应的数字添加到树的每个级别来向树中添加元素。我认为我应该使用某种类型的树数据结构,但不知道哪一种效率最高。
最后,我想将一个值与每个“叶子”相关联,因此每个三元组将映射到某个整数值。
答案 0 :(得分:3)
对于像这样的东西,Trie可能是最有效的结构。您可以找到关于Trie的here的概述。
基本上是Trie的商店价值,在价值的早期可能存在许多重叠(如字符串或数字序列),只需在每个位置存储一次值。您绘制的图表几乎完全描绘了一个Trie。
答案 1 :(得分:1)
很难准确说出你想要的东西。
快速解决方案只是std::map<std::tuple<int, int, int>, ValueType>
,在您的示例中,ValueType
只是int
。
或者,您可以这样做:
class Node
{
//optional - depends on whether you need it:
std::weak_ptr<Node> parent;
//for the children, you might want this (if they are numbered 0, 1, ...)
std::vector<std::unique_ptr<Node>> children;
//or instead you might want this for the children
//(if they are numbered with potential gaps, like in your example):
std::map<int, std::unique_ptr<Node>> children;
};
class LeafNode : Node
{
ValueType data; //ValueType is whatever you want
}
答案 2 :(得分:0)
非常喜欢suffix trees。但哪一个对你来说更方便..解决你。