是否有此分层模型数据的静态容器
Is there an stl container for this hierarchical model data?
对于独立于平台的模型层,我有如下的分层数据(实际上是字符串):
- 项目一个
- 子项
- 子项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中没有树。你建议的款式很好。
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 静态数据成员模板专用化的实例化点在哪里
- 内联静态数据的初始化
- 调用在 HXX 文件中声明的静态数据成员
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 静态数据成员:它"const declaration / constexpr definition"起作用?
- 何时需要定义类的静态数据成员 (un/-)
- 为什么静态数据成员不能在c++11中的类中初始化
- 访问模板化类的非模板基的静态数据
- 静态数据成员的模板专用化
- 拒绝包含某些公共静态数据成员的类型
- GCC:在调试构建中优化的静态数据成员
- 类模板静态数据成员定义/声明/初始化
- 是否允许在作为静态数据结构成员的lambda函数中捕获变量
- C++ 中的静态数据成员
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 使用 lambda 函数初始化静态数据成员
- 引用静态数据成员
- 学习C++并在早期示例中遇到错误(在非静态数据成员之前需要构造函数)