加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在qsort之后标识项目/类指针

发布时间:2020-12-16 07:26:10 所属栏目:百科 来源:网络整理
导读:第一个问题请原谅我的天真. 我正在深入研究c的三角测量库,它在运行它的三角测量方法之前对一组结构指针进行排序.我试图在我的应用程序中跟踪一个特定的结构指针(XYZ),它根据鼠标位置进行更新.问题是,无论何时应用qsort方法,该指针都会改变.如何识别或跟踪此
第一个问题请原谅我的天真.

我正在深入研究c的三角测量库,它在运行它的三角测量方法之前对一组结构指针进行排序.我试图在我的应用程序中跟踪一个特定的结构指针(XYZ),它根据鼠标位置进行更新.问题是,无论何时应用qsort方法,该指针都会改变.如何识别或跟踪此结构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

解决方法

你有几个选择:

>您可以在排序后搜索您的唯一条目.如果您为标记添加线性标记成员搜索.如果任何具有匹配的X / Y坐标的条目与您在分类数组中可以搜索的任何其他条目一样好.您可以通过使用bsearch找到正确的X坐标,然后对标记进行(较短的)线性搜索来组合它们.>您可以添加一个间接层.不是对XYZ结构数组进行排序,而是创建一个并行的索引列表或指向该数组的指针,然后对XYZ *或int引用进行排序.您的mousePointer引用将保持有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读