如何对结构数组进行排序,这些结构具有指向同一数组的指针
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)[];
};
如果我没理解错的话,问题是:
How do I keep 2 data structures synchronized, if I sort one of them?
当前状态为:
sort()
{
...
swap(a,b);
...
}
这当然不会触及第二个数据结构,因此导致同步丢失。
我会使用以下算法使它们保持同步:
sort()
{
...
swap(*pa, *pb);
swap( pa, pb);
...
}
两者的区别在于多了一行代码来处理第二个数据结构
移动从其他节点引用的结构之前请三思。当您对顶点数组进行排序时,所有指向它们的面和边都必须实现以指向您移动它的新位置。否则您将丢失所有数据结构。出于这个原因,使用指针数组并对数组进行排序比使用整个结构要有趣得多。您可以有三个或四个指针阵列来显示不同的顺序,而不会破坏您的网格。并且复制指针比复制整个结构更便宜。
我有一个结构数组(顶点),每个结构都有一个名称、一种颜色、一定数量的邻居和一个指针数组(邻居),所有指针都引用主结构数组中的一个顶点。我想根据名称、颜色等进行一些重新排序,问题是,每当我对主结构数组进行重新排序时,每个邻居数组都会丢失邻居的真实地址(因为职位)。
我必须使用qsort()
,而且我无法更改数据结构。
这是整个数据结构:
struct VerticeSt {
int vertice;
int color;
int cantVecinos;
struct VerticeSt* (*vecinos)[];
};
如果我没理解错的话,问题是:
How do I keep 2 data structures synchronized, if I sort one of them?
当前状态为:
sort()
{
...
swap(a,b);
...
}
这当然不会触及第二个数据结构,因此导致同步丢失。
我会使用以下算法使它们保持同步:
sort()
{
...
swap(*pa, *pb);
swap( pa, pb);
...
}
两者的区别在于多了一行代码来处理第二个数据结构
移动从其他节点引用的结构之前请三思。当您对顶点数组进行排序时,所有指向它们的面和边都必须实现以指向您移动它的新位置。否则您将丢失所有数据结构。出于这个原因,使用指针数组并对数组进行排序比使用整个结构要有趣得多。您可以有三个或四个指针阵列来显示不同的顺序,而不会破坏您的网格。并且复制指针比复制整个结构更便宜。