我有一个结构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;
}
Run Code Online (Sandbox Code Playgroud)
这是向量的声明:
vector<subPolygon*> subPolygons;
Run Code Online (Sandbox Code Playgroud)
该qsort呼叫:
qsort(&subPolygons[0], subPolygons.size(), sizeof(struct subPolygon*),cmpFunc);
Run Code Online (Sandbox Code Playgroud)
编辑:似乎问题是一个额外的错误:
cmpFunc: non-standard synatx; use & to create pointer to a member "
我的比较器函数是一个类的成员.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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |