是否有此分层模型数据的静态容器

Is there an stl container for this hierarchical model data?

本文关键字:静态 数据 模型 分层 是否      更新时间:2023-10-16

对于独立于平台的模型层,我有如下的分层数据(实际上是字符串):

  • 项目一个
    • 子项
    • 子项B
    • 子项C
      • SubSubItem
      • SubSubItem B
    • 子项D
  • B项
  • 项目C

现在,在每个"级别"(Item, SubItem, SubSubItem等)中,项目需要按字母顺序排序。

似乎一个简单的解决方案是创建一个简单的类,带有一个有序的std::Vector或std::MultiMap来跟踪它的子类,以及一个指向父类的指针。(和一个根项)。我通常需要在向前的方向上遍历每个条目的子条目。

构造/排序后,我不需要添加或删除项目。一般是小数量的项目(数百)。

这是用于概要样式控件的支持数据的模型组织。

滚动一个简单的类会很容易,但这是一个常见的模式-不是已经有一个现成的STL容器具有这种行为吗?

STL本身没有,但您可能会发现这很有用:

树。一个类似stl的c++树类

它的API完全遵循STL容器,它应该做你正在寻找的。

我相信他们的例子正是你所问的(一个有字符串的树),事实上

一个简单的解决方案:

键是std::vector<GUID>,其中GUID是唯一标识每个元素的某种类型(可能是GUID、指针或字符串)。元素的子元素仅以元素std::vector<GUID>作为"前缀"。

只要您的GUID可以通过operator<进行排序,std::vector上的词典排序将按照您要求的顺序获得内容。

map<std::vector<GUID>, Value>可以是您的容器,也可以是您手动按.first排序的std::vector< std::pair< GUID, Value > >

如果您的GUID类型可以有"最后一个元素",您可以通过查找{x,y,z}lower_bound{x,y,z,last_guid}upper_bound来查找{x,y,z}的每个子元素。给它一个"最后一个元素"是不使用裸指针的一个优点。

No。我无意无礼,但这就是答案;参见Josuttis或标准。您必须创建一个类,其中父/子指针沿着您建议的行,并使用这些向量或其他标准容器。

你的问题的答案是否定的,在STL中没有树。你建议的款式很好。