c++ - Qsort 和不兼容的比较器函数 - C++

标签 c++ qsort

<分区>

我有一个结构 subPolygon 和一个指向该结构的指针 vector 。我试图在 vector 上使用 qsort 但比较器功能显示为不兼容。我究竟做错了什么?

int cmpFunc(const void *p, const void *q) {
    struct subPolygon* p1 = *((struct subPolygon**)p);
    struct subPolygon* p2 = *((struct subPolygon**)q);
    int s1 = p1->size;
    int s2 = p2->size;
    if (s1-s2 < 0 ) return -1;
    if (s1 == s2) return 0;
    return 1;
}

这是 vector 的声明:

vector<subPolygon*> subPolygons;

qsort 调用:

qsort(&subPolygons[0], subPolygons.size(), sizeof(struct subPolygon*),cmpFunc);

编辑: 看来问题是一个额外的错误: cmpFunc:非标准 synatx;使用 & 创建指向成员的指针 " 我的比较函数是一个类的成员。 Qsort 是从该类的成员调用的。使我的比较器函数静态化解决了这个问题。

最佳答案

你真正应该做的:

bool compare(const subPolygon *p1, const subPolygon *p2)
{
    int s1 = p1->size;
    int s2 = p2->size;
    return (s1-s2 < 0);
    // Or just: return p1->size < p2->size;
}

std::sort(subPolygons.begin(), subPolygons.end(), compare);

关于c++ - Qsort 和不兼容的比较器函数 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50099226/

相关文章:

c++ - 未找到 NTL 头文件

我可以将 memcmp 与 qsort 一起使用吗?

c - 主要不认识我的功能

调用 qsort 比较器

c++ - 什么时候显式调用 C++ 析构函数?

c++ - 如何在返回第二个值的同时完善从函数返回的值?

c - C 中的 qsort 段错误

c - OpenMP 通用 qsort 加速效果不佳

c++ - 内存堆损坏 + GFlags 工具但不是结果

c++ - 我的 RC6 实现有什么问题?