gpt4 book ai didi

结构数组上的 C++ qsort 内部函数

转载 作者:行者123 更新时间:2023-11-28 07:17:33 25 4
gpt4 key购买 nike

我又来了,我正在处理 zipType 数组的 qsort。我编写的比较函数如下所示:

    int compare(const void *v1, const void *v2){
const struct zipType *p1 = v1;
const struct zipType *p2 = v2;
if (p1->postalCode > p2->postalCode)
return(+1);
else if (p1->postalCode < p2->postalCode)
return(-1);
else
return(0);
}

这是使用它的函数:

   void binRead(zipType *zip, fstream *input){
int junk;
int count;
int end;
input->seekg(0,ios::end);
end=input->tellg();
count=input->tellg()/24;
input->seekg(0);

while(input->tellg()!=end){
for(int i=0;i<count;i++){
input->read((char*)( &(zip[i].postalCode) ), sizeof(int ));
input->read((char*)( &junk ), sizeof(int ));
input->read((char*)( &(zip[i].longitude) ), sizeof(double ));
input->read((char*)( &(zip[i].latitude) ), sizeof(double ));
cout << "Currently at position" << input->tellg() << endl;
}
}

cout << "Array Created, Please wait while I sort" << endl;
qsort(zip, count, sizeof(int), compare);
usleep(3000000);
cout << "Array Sorted" << endl;

}

我遇到的错误是以下几个:

    invalid conversion from ‘const void*’ to ‘const zipType*’ [-fpermissive]
const struct zipType *p2 = v2;

其中之一:

     error: cannot convert ‘zipType’ to ‘void*’ for argument ‘1’ to ‘void qsort(void*, size_t, size_t, int (*)(const void*, const void*))’
qsort(*zip, count, sizeof(int), compare);

知道我应该做什么吗?

最佳答案

要修复第一个错误,您需要在比较例程中从 void* 进行转换:

auto p1 = static_cast<const struct zipType*>(v1);

要修复第二个错误,我认为我们需要再次转换,但这次是 void*:

qsort(static_cast<void*>(zip), count, sizeof(zipType*), compare)

老实说,我不确定为什么需要这个类型转换。如果我没记错我的转换规则,zipType* 应该可以隐式转换为 void*。如果有人知道,请发表评论,我会编辑答案,或者,如果可以,只编辑答案。

请注意,您需要 third parameter 的数组中元素的大小,这里不是 sizeof(int)。您有一个 zipType* 数组,而不是 int

由于您使用的是 C++(推断是因为您使用的是 std::cout),所以请尝试 std::sort .它的类型更安全,通常可以更好地优化。

std::sort(zip, std::advance(zip, count), compare)

另外,因为这是 C++,所以您不需要说 struct zipType。您可以只说 zipType

关于结构数组上的 C++ qsort 内部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19993684/

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