首页 > 解决方案 > Qsort 和不兼容的比较器功能 - C++

问题描述

我有一个结构subPolygon和一个指向该结构的指针向量。我正在尝试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<subPolygon*> subPolygons;

qsort来电:

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

编辑:似乎问题是一个额外的错误: cmpFunc: non-standard synatx; use & to create pointer to a member " 我的比较器函数是一个类的成员。Qsort 是从该类的成员中调用的。使我的比较器函数静态解决了这个问题。

标签: c++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);

推荐阅读