我想知道是否有人可以推荐一个好的C++树实现,希望有一个stl兼容,如果可能的话.
为了记录,我之前已经多次编写树算法,我知道它可以很有趣,但是如果可能的话,我想要务实和懒惰.因此,实际的工作解决方案链接就是目标.
注意:我正在寻找一个通用树,而不是平衡树或地图/集,在这种情况下,结构本身和树的连接性很重要,而不仅仅是数据.因此,每个分支都需要能够保存任意数量的数据,并且每个分支应该是可单独迭代的.
是否有数据树的python库?
我的意思是树作为一般数据结构,而不仅仅是一个xml树.(就像在这个问题中,但在python中.)
以下是合法的吗?
template< typename T >
struct tree_node
{
T t;
std::vector<tree_node> children;
};
Run Code Online (Sandbox Code Playgroud)
对这篇文章的评论似乎表明事实并非如此.
编辑:这不会打击我作为"未定义的行为"类型的场景.预期的语义是明确的.如果它是不完整类型的无效用法,那么它应该是编译时错误.
在我的测试中,这似乎工作正常(我使用了GCC和Clang - 两者都有-Wall -Werror -std=c++11).
语言定义中是否有某些东西(在C++ 17之前)直接或间接地将其指定为未定义的行为,或者它只是指定不足?
请记住,这在结构上非常类似于以下内容:
typedef int T;
struct tree_node;
struct tree_node
{
T t;
tree_node * children;
}
Run Code Online (Sandbox Code Playgroud) 对于独立于平台的模型层,我有分层数据(实际上是字符串),如下所示:
现在,在每个"级别"(Item,SubItem,SubSubItem等)中,项目需要按字母顺序排序.
似乎一个简单的解决方案是创建一个带有排序的std :: Vector或std :: MultiMap的简单类来跟踪它的Children,以及指向它的Parent的指针.(和一个根项目).我需要一般地向前遍历每个项目的孩子.
构建/排序后,我不需要添加或删除项目.通常少量的物品(数百).
这是用于轮廓样式控件的后备数据的模型组织.
滚动一个简单的类很容易,但这是一个常见的模式 - 是不是已经有一个现成的STL容器有这种行为?
我正在尝试制作一棵地图树(或者只是将一个地图的值指向另一个地图),但我不太确定如何解决这个问题。我找到了关于此的讨论:http://bytes.com/topic/c/answers/131310-how-build-recursive-map但我对那里发生的事情有点困惑。
例如,我的键是一个字符,我的值是下一个地图。这是假设的声明:
map< char, map< char, map< char.......>>>>>>>>>> root_map;
Run Code Online (Sandbox Code Playgroud) 对于那些了解 Python 的人来说,解释我想要什么的最好方法是通过类比:
[1, [2, 3], 4, [5, [6]], 7]
Run Code Online (Sandbox Code Playgroud)
显然,我可以实现我自己的类(模板)来做到这一点,但是如果标准库已经发明了这个轮子,我想避免重新发明它(或者至少,避免将我半生不熟的重新发明的版本放入我的项目)。
是否有段树的STL?
在竞争性编程中,需要花费大量时间来编写seg树.我想知道是否有任何STL,以便节省大量时间.
最近我用C编写了很多代码,我注意到,在我的程序中花费大部分时间的事情是调整动态数据结构的大小.假设我们有一个包含字符的数组,我想在这个数组的末尾添加一些字符.我这样做:
我只是想知道这是否足够有效.例如,我可以想到像树结构这样的东西,我将数组保存在树的节点中,这样,而不是在追加东西之前将旧元素复制到新数组,我只是将新的malloc'ed元素添加到下一个树的节点并在那里附加字符.这样我就可以避免不必要的复制......
所以这只是以不同方式调整大小的一种方式.我应该寻找其他的东西,还是我只是将旧元素复制到新数组的两倍大小的解决方案?
我正在学习数据结构和抽象数据类型,并且我一直陷入一个不断涌现的问题.
我不明白计算机科学现在已有50年历史了(或更老,我不确切知道)以及数据结构,ADT和算法如何成为这一切的基础部分,但仍然没有标准任何一个.
我的问题实际上非常具体:我正在尝试在C++中实现深度优先搜索,其方式可以适用于任何本机(内置)数据类型.我的问题是,我先在哪里看?我知道STL的堆栈类可以用来实现DFS算法,但STL是第一个看的地方吗?我应该从头开始实现DFS,使用堆栈以及我对实现此算法的了解吗?或者,当专业程序员需要进行这种搜索时,他们会找到一个库?
请注意,这个问题并不像我希望的那样具体.
c++ ×7
stl ×3
tree ×2
algorithm ×1
arrays ×1
c ×1
class ×1
containers ×1
dictionary ×1
graph-theory ×1
python ×1
recursion ×1
segment-tree ×1
sorting ×1