我正在尝试找出一种有效的方式来对数组进行排序,其中每个对象都可以指向同一数组中“父”对象的索引。
每个对象都可以没有父对象(索引为-1),也可以没有一个父对象,因此只有一对多的关系。
您可以将任意数量的对象链接在一起,从而创建深层次。
但是,它们全部位于一个连续的数组中,并以任意顺序添加。
以下是一个对象外观的示例:
struct Object
{
void* data;
int ParentIndex; //Will either be '-1' or will be an index in 'objects' where the parent of this object is.
};
std::vector<Object> objects;
看来,一对多关系的唯一方法是对每个父级使用深度递归。
但是,它的性能非常差。
是否存在可以解决此类问题的算法?
答案 0 :(得分:1)
您必须考虑一些问题:
因此,我认为唯一有效的方法是使用指针而不是索引将其转换为图(多子树)。
struct Object2
{
void* data;
Object2* FirstChild; // Will point to first child (if there is), or null.
Object2* NextSibling;// Will point to next sibling (if there is), or null.
};
实际上,您可以使用任何XML库对其进行排序: