qsort C++:调用'qsort'没有匹配函数
qsort c++:no matching function for call to 'qsort'
这个是compareX和compareY
struct Point
{
long long int x, y;
};
long long int compareX(const void* a, const void* b)
{
Point *p1 = (Point *)a, *p2 = (Point *)b;
return (* (long long int * )(p1->x - p2->x));
}
long long int compareY(const void* a, const void* b)
{
Point *p1 = (Point *)a, *p2 = (Point *)b;
return (* (long long int * )(p1->y - p2->y));
}
这是调用比较 Y 的 qsort
long long int stripClosest(Point strip[], long long int size, long long int
d)
{
long long int min = d;
qsort(strip, size, sizeof(Point), compareY);
for (long long int i = 0; i < size; ++i)
for (long long int j = i+1; j < size && (strip[j].y - strip[i].y) < min;
++j)
if (dist(strip[i],strip[j]) < min)
min = dist(strip[i], strip[j]);
return min;
}
这是调用 compareX 的 qsort
long long int closest(Point P[], long long int n)
{
qsort(P, n, sizeof(Point), compareX);
return closestUtil(P, n);
}
我不知道为什么说"注意:候选函数不可行:没有已知的从'长长(常量无效*,常量无效)'到'int(_Nonnull)(常量无效*,常量无效*)'的第4个参数"和"错误:调用'qsort'没有匹配函数"
函数 qsort 要求相应参数的函数类型为
int ( const void *, const void * )
还有这种带有指针的魔法
* (long long int * )(p1->x - p2->x)
不清楚并导致未定义的行为。
因此,例如,函数compareX
可以通过以下方式定义
int compareX(const void *a, const void *b)
{
const Point *p1 = static_cast<const Point *>(a);
const Point *p2 = static_cast<const Point *>(b);
return (p2->x < p1->x) - (p1->x < p2->x);
}
或者可以用"C"链接声明
extern "C" int compareX(const void *a, const void *b)
{
const Point *p1 = static_cast<const Point *>(a);
const Point *p2 = static_cast<const Point *>(b);
return (p2->x < p1->x) - (p1->x < p2->x);
}
考虑到C++您可以使用带有比较函数的标准算法std::sort
。
这是一个演示程序,展示了使用标准 C 函数qsort
和标准 C++ 算法std::sort
的两种方法。
#include <iostream>
#include <iterator>
#include <algorithm>
#include <cstdlib>
struct Point
{
long long int x;
long long int y;
};
int compareX(const void *a, const void *b)
{
const Point *p1 = static_cast<const Point *>(a);
const Point *p2 = static_cast<const Point *>(b);
return (p2->x < p1->x) - (p1->x < p2->x);
}
int main()
{
{
Point p[] = { { 2, 1 }, { 1, 1 }, { 3, 1 } };
qsort(p, sizeof(p) / sizeof(*p), sizeof(Point), compareX);
for (const auto &item : p)
{
std::cout << "(" << item.x << ", " << item.y << ") ";
}
std::cout << std::endl;
}
{
Point p[] = { { 2, 1 },{ 1, 1 },{ 3, 1 } };
std::sort( std::begin( p ), std::end( p ),
[](const Point &a, const Point &b)
{
return a.x < b.x;
});
for (const auto &item : p)
{
std::cout << "(" << item.x << ", " << item.y << ") ";
}
std::cout << std::endl;
}
return 0;
}
程序输出为
(1, 1) (2, 1) (3, 1)
(1, 1) (2, 1) (3, 1)
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- Qt:qSort 而不使用复制构造函数
- 外部 C 和 C++ 对于单个函数(bsearch / qsort)的目的是什么?
- qsort C++:调用'qsort'没有匹配函数
- 正在尝试将c++qsort与内联函数一起使用
- 在结构数组上C++ qsort 内部函数
- 指向函数(compar)的指针出现c++qsort错误
- 与将标准作为模板参数传递给sort()相比,将标准函数指针传递给qsort()的开销更小
- c++ qsort中非静态成员函数的无效使用
- 内置的qsort函数和稳定的排序函数有什么区别?
- 解释compareX在qsort()库函数中的工作
- cmp函数qsort中未初始化的值