这种比较是否不一致(或者存在其他问题)?



下面的代码在我的Mac上出错;但是,在Linux上工作正常(甚至没有valgrind错误(。

我怀疑比较函数给出的结果不一致;但是,我看不出如何。

(我有一种感觉,当有人指出这一点时,我会觉得自己很愚蠢:)

对于上下文:这是学生的代码。 我知道有更好的编码方法,我只是对为什么它是错误的感到困惑。

using namespace std;
using Point = std::pair<double, double>;
using PointVector = vector<Point>;
extern PointVector cluster1;
bool sortComparison(const Point &point1, const Point &point2) {
if(point1.first < point2.first)
return true;
else if(point1.first > point2.first)
return false;
else if(point1.second < point2.second)
return true;
else if(point1.second > point2.second)
return false;
else
return true;
}

int main(int argc, char *argv[]) {
cout << "In" << endl;
std::sort(cluster1.begin(), cluster1.end(), sortComparison);
cout << "Out" << endl;
}

如果第一个参数小于第二个参数(a < b(,则std::sort的比较函数应返回true,但是如果它相等,则返回true(由于else return true;a <= b(。这可能会破坏std::sort的实现。

最新更新