【发布时间】:2017-05-31 07:13:21
【问题描述】:
我有一个奇怪的问题,也许我遗漏了一些明显的东西,但我无法弄清楚。
这是引发断言的 C++ 代码:
int compareByX(const Vector2D &a, const Vector2D &b)
{
if (a.x < b.x) // if i put a.x > b.x nothing changes
return -1;
return 1;
}
int main(int argc, char *argv[])
{
double pts[6] = { 5, 34, 3, 54, 10, 34 };
std::vector<Vector2D> points;
for (int i = 0; i < 6; i += 2)
points.push_back({ pts[i],pts[i + 1] });
std::sort(points.begin(), points.end(), compareByX);
}
发生的情况是第一点 (3, 54) 与 (5, 34) 进行测试,然后反之亦然。 此时会抛出断言(无效的比较器)。但我认为它有权返回 -1,因为 3 小于 5,然后返回 1,因为 5 大于 3...
你能告诉我这有什么问题吗?
【问题讨论】:
-
sort期望比较函数返回true(1) 或false(0)。你认为-1会发生什么?这种实现compareByX:{ return a.x < b.x; }的方式怎么样? -
This
std::sortreference 应该会有所帮助。 -
现在我明白了,谢谢!以为我正在使用 qsort :/
-
对于 qsort,你仍然需要在相等时返回 0。
-
是的,但我首先从: double diff =a.x-b.x ;返回(双(0)