[英]identify item/class pointer after qsort
第一个问题,请原谅我在这里的幼稚。
我正在研究 c++ 的三角测量库,它在运行它的三角测量方法之前对结构指针数组进行排序。 我试图在整个应用程序中跟踪一个特定的结构指针 (XYZ),它会根据鼠标 position 进行更新。 问题是,每当应用 qsort 方法时,这个指针就会改变。 如何识别或跟踪这个 struct XYZ 指针?
这是结构和排序...
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);
}
带有鼠标指针引用的 XYZ 结构数组(此处为 2 个用于测试)...
XYZ *allPointers = new XYZ[100];
allPointers[0].x = 100;
allPointers[0].y = 200;
allPointers[0].z = 0;
allPointers[1].x = 50;
allPointers[1].y = 80;
allPointers[1].z = 0;
XYZ *mousePointer = &allPointers[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
你有几个选择:
bsearch
中搜索它。 您可以通过使用bsearch
找到正确的X
坐标,然后对标记进行(较短的)线性搜索来组合它们。XYZ
结构数组进行排序,而是在该数组中创建索引或指针的并行列表,然后对XYZ *
或int
引用进行排序。 您的mousePointer
引用将保持有效。qsort() 的第三个参数不应该是 size(XYZ*) 吗? 您正在对指针进行排序,而不是对指向的对象进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.