[英]How to sort an array of structures, with these structures having pointers to the same array
我有一个结构数组(顶点),每个结构都有一个名称,颜色,一定数量的邻居和一个指针数组(邻居),所有指针都引用结构主数组中的一个顶点。 我想根据名称,颜色等进行一些重新排序,问题是,每当我对结构的主数组进行重新排序时,每个邻居数组都会丢失邻居的真实地址(因为切换了职位)。
我必须使用 qsort()
我不能改变的数据结构。
这是整个数据结构:
struct VerticeSt {
int vertice;
int color;
int cantVecinos;
struct VerticeSt* (*vecinos)[];
};
如果我理解正确,那么问题是:
如果对其中一种排序,如何保持2种数据结构同步?
当前状态为:
sort()
{
...
swap(a,b);
...
}
哪个当然不涉及第二个数据结构,因此导致失去同步。
我将使用以下算法使它们保持同步:
sort()
{
...
swap(*pa, *pb);
swap( pa, pb);
...
}
两者之间的区别是添加了另一行代码来处理第二个数据结构。
在移动从其他节点引用的结构之前,请三思。 在对顶点数组进行排序时,必须将所有指向它们的面和边都实现为指向已移动的新位置。 否则您将丢失所有数据结构。 因此,使用指针数组而不是整个结构对数组进行排序会更加有趣。 您可以使三个或四个指针数组显示不同的顺序,而不会破坏网格。 复制指针比复制整个结构便宜。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.