c++ - 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 是从该类的成员中调用的。使我的比较器函数静态解决了这个问题。
解决方案
你真正应该做的:
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);
推荐阅读
- python - Python 在包中导入模块
- c# - 在xml c#中加入2个子节点
- keras - 如何修复“输入张量必须具有 rank 4”的错误?
- sql-server - SQL Server - JOIN ON 条件语句
- python - 处理 Pandas 中的日期时间列:如何修复 pandas 中的“类型错误:需要整数”。异常触发另一个异常
- bitcoin - 解码比特币交易 vin 地址
- php - reCaptcha 显然将人类识别为机器人
- roku - 删除重复字符串并在 Roku 中显示唯一字符串
- apache-kafka - Kafka Connect fetch.max.wait.ms 和 fetch.min.bytes 组合不兑现?
- flutter - 如果 Facebook 应用程序不可用,我想打开网站,但优先级应该是应用程序优先