又一个STL树

时间:2009-08-05 16:08:06

标签: list dictionary tree stl

我有一个有趣的问题。

我现在正在使用HTML解析器,我正在使用向量<HTMLTag>来完成我的所有输入目的,这对于创建树来说似乎非常好和快。

在另一个应用程序中,我需要编辑HTML结构,现在使用向量插入或重新排序元素会非常痛苦,所以我决定切换到更像树状结构。

我阅读了一些关于树及其实现的文章,我正在为此目的考虑std :: map。

这样的事情:

std::map< element, *child_map >

因此,当我想在中间插入一个标签并让它们全部按某个键排序时(例如唯一的整数id),我在插入后更新分支中的所有键时仍然有问题。

例如:

1:SCRIPT
2:HEAD
3:BODY

当我想在HEAD之后插入新元素“SCRIPT”时,我需要将Body Key增加到4并且具有以下内容:

1:SCRIPT
2:HEAD
3:SCRIPT
4:BODY

对我来说似乎有点麻烦。我错过了什么吗?

作为替代方案,我想到了list<pair<>>实现。因此,排序不是由密钥决定的,我可以在任何地方添加元素而无需任何额外的更新。

2 个答案:

答案 0 :(得分:2)

我会让子设置元素的成员并使用std :: list:

class Element {
/* ... */
  std::list<boost::shared_ptr<Element> > children;
/* ... */
};

也就是说,您可能希望使用现有的DOM库而不是自己编写DOM库。例如,您可以使用htmlcxx

答案 1 :(得分:0)

列表与LT;对&gt;可以很好地模拟任何形式的树结构,例如你正在尝试做的事情:

列表&LT;对&LT; “html”,列表&gt;可以让你存储任意数量的子节点以及控制子列表中对象的顺序。

走这棵树玩得开心。