C++ 在qsort之后标识项/类指针
第一个问题,请原谅我的天真 我跳入C++的三角测量库,在运行三角测量方法之前,对结构指针数组进行排序。我试图在整个应用程序中跟踪一个特定的结构指针(XYZ),它会根据鼠标位置进行更新。问题是,无论何时应用qsort方法,该指针都会更改。如何识别或跟踪此结构XYZ指针 这是结构和排序C++ 在qsort之后标识项/类指针,c++,pointers,struct,qsort,C++,Pointers,Struct,Qsort,第一个问题,请原谅我的天真 我跳入C++的三角测量库,在运行三角测量方法之前,对结构指针数组进行排序。我试图在整个应用程序中跟踪一个特定的结构指针(XYZ),它会根据鼠标位置进行更新。问题是,无论何时应用qsort方法,该指针都会更改。如何识别或跟踪此结构XYZ指针 这是结构和排序 struct XYZ{ double x, y, z; }; int XYZCompare(const void *v1, const void *v2){ XYZ *p1, *p2; p1 = (X
struct XYZ{
double x, y, z;
};
int XYZCompare(const void *v1, const void *v2){
XYZ *p1, *p2;
p1 = (XYZ*)v1;
p2 = (XYZ*)v2;
if(p1->x < p2->x)
return(-1);
else if(p1->x > p2->x)
return(1);
else
return(0);
}
排序和更新鼠标方法
mousePointer->x = mouseX;
mousePointer->y = mouseY;
// If I don't qsort here the reference is fine, but I need to.
qsort(allPointers, 2, sizeof(XYZ), XYZCompare);
// triangulate, etc
qsort()的第三个参数不应该是size(XYZ*)?您正在对指针进行排序,而不是对指向的对象进行排序。您有两个选项:
- 您可以在排序后搜索您的唯一条目。如果添加标记成员,请线性搜索该标记。如果任何具有匹配X/Y坐标的条目与任何其他条目一样好,则可以在排序数组中搜索该条目。您可以使用
组合这些坐标,以找到右侧b搜索
坐标,然后(较短)线性搜索标记X
- 您可以添加一个间接层。不要对数组中的
结构进行排序,而是创建一个索引或指针的并行列表,并对XYZ
或XYZ*
引用进行排序。您的int
引用将保持有效mousePointer
c++
,而不是c
,通常使用std::sort
from
比qsort
更好(即更快)。由于std::sort
是一个模板函数,它知道要排序的数组的数据类型,因此可以更有效地执行操作。
mousePointer->x = mouseX;
mousePointer->y = mouseY;
// If I don't qsort here the reference is fine, but I need to.
qsort(allPointers, 2, sizeof(XYZ), XYZCompare);
// triangulate, etc