dei*_*ght 4 c++ sorting vector
我有一个奇怪的问题,也许我遗漏了一些明显的东西,但我无法弄清楚。
这是引发断言的 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);
}
Run Code Online (Sandbox Code Playgroud)
发生的情况是第一点 (3, 54) 针对 (5, 34) 进行测试,然后反之亦然。此时会抛出断言(无效的比较器)。但正如我所见,返回 -1 是正确的,因为 3 小于 5,然后返回 1,因为 5 大于 3 ......
你能告诉我这有什么问题吗?
无效的比较器断言被抛出,因为该函数返回 -1 和 1,而 std::sort 仅采用 true 或 false 以具有弱严格排序。
通过将函数更改为:
bool compareByX(const Vector2D &a, const Vector2D &b)
{
return a.x < b.x;
}
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作。
最后确实是一个很明显的错误。