【发布时间】:2010-09-10 16:53:41
【问题描述】:
我正在尝试为 C++ Linux 项目实现一个通用层次结构树。
不过,我还没有找到任何标准库树容器。
有吗?
提前致谢, 蒂姆
【问题讨论】:
-
树可以是地图等事物中使用的底层数据结构 - 您是否为特定目的实现树?
我正在尝试为 C++ Linux 项目实现一个通用层次结构树。
不过,我还没有找到任何标准库树容器。
有吗?
提前致谢, 蒂姆
【问题讨论】:
这是一个使用 STL 容器创建分层树(没有特殊属性的 n 元)的简单方法。它不是预先构建的,但它非常简单,并且利用了一些 STL 属性。要创建自己的搜索,您必须实现自己的算法,但这应该很轻松。
template<typename T>
class TreeNode
{
public:
TreeNode()
{
}
TreeNode(const T& value)
: Value(value)
{
}
T Value;
std::list<TreeNode<T> > Children;
};
【讨论】:
std::list<TreeNode<T>*> 怎么样?这听起来几乎是合法的。不过,这又是不必要的混乱。
STL set 和 map 在内部都使用二叉树
【讨论】:
std:map 是使用树实现的,您可以利用它。这是我目前能想到的唯一“标准库树容器”。
【讨论】:
Boost 有一个 PropertyTree 容器,它可能是您正在寻找的。它基本上由存储一个值的节点和任意数量的子节点组成。 Boost 也非常接近标准。
http://www.boost.org/doc/libs/1_44_0/doc/html/property_tree.html
【讨论】:
默认情况下没有 STL 类。您可以使用 STL 组件编写自己的树类,也可以尝试使用这个类似 STL 的树库:
【讨论】:
没有可用于构建树结构的标准库容器。但是,如果您在理论上有足够的了解并且对编程语言(在您的情况下是 c++)没问题,那么创建通用树并不是一项艰巨的任务。
首先创建通用(模板化)节点,为子节点添加两个指针(二叉树)或子节点指针列表(n-ary)。
struct Node
{
int data;
Node *left;
Node *right;
}
给你。创建一个实例,您就有了根节点。创建更多节点并将它们作为子节点附加到根节点。重复同样的事情。和树一起玩很棒!
您会在网上找到很多示例。有一个here 完全支持 Niki 的回答。
【讨论】:
这已经晚了,但可能会帮助某人。 nlohmann json 或一般的 json,可用于树数据结构
https://github.com/nlohmann/json https://kezunlin.me/post/f3c3eb8/
【讨论】: