gpt4 book ai didi

c++ - qsort 用于对对象数组进行排序

转载 作者:太空狗 更新时间:2023-10-29 20:28:10 33 4
gpt4 key购买 nike

我正在尝试使用 qsort() 对对象指针数组进行排序 (PointP = Point*)附件是比较函数和排序,问题是没有任何反应,排序也没有发生。

int compareByAngleP(const void* elem1,const void* elem2) {
PointP point1 = (PointP) elem1;
PointP point2 = (PointP) elem2;
if (abs(point1->getAngle() - point2->getAngle())>0.001)
{
return point1->getAngle() - point2->getAngle();
}
return point1->getY() - point2->getY();
}

void sortArrayP(PointP* array, int size) {
qsort(array,size, sizeof(PointP), compareByAngleP);
}

最佳答案

我的建议是忘记std::qsort , 喜欢素旧std::sort .不像std::qsort它是类型安全的,并且在大多数实现中要快得多。

std::sort(array, array+size, compareByAngleP);

并去掉 void*在支持实际类型的比较函数中。

此外,如果您使用的是 C++11 并且数组只是本地的:

std::sort(std::begin(array), std::end(array), compareByAngleP);

或者更好的是使用 std::vector或其他最合适的容器。

std::vector<Point> array { ... };
std::sort(array.begin(), array.end(), compareByAngleP);

注意事项

您可能需要修改比较函数,以便在第一个参数小于第二个参数时返回 true。 (或者简单地为 Point 实现 operator <)。

引用资料

http://en.cppreference.com/w/cpp/algorithm/sort

http://en.cppreference.com/w/cpp/container/vector

关于c++ - qsort 用于对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13935487/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com