繁体   English   中英

如何对结构数组进行排序,这些结构具有指向同一数组的指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM