按降序对值1000000的1000个元素的数组进行排序时,无法理解Comparator函数的行为。 (该数组已索引1个)

比较器函数定义的第一个实例具有随机性
在数组中的某些索引处为零。

比较器函数定义的第二个实例工作正常。
谁能解释为什么会这样

bool func(long long a, long long b){
  return (a >= b);
}


sort (A+1, A + 1000 + 1, func);





bool func(long long a, long long b){
  return (a > b);
}


sort (A+1, A + 1000 + 1, func);



输出1:
1000000 1000000 1000000 0 0 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000

输出2:
1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000

最佳答案

当您将自定义比较函数传递给std::sort时,它们必须引发所谓的“严格弱排序关系”(请参见here)。您的职能

bool func(long long a, long long b){
  return (a >= b);
}


不满足这些要求(例如func(42, 42) != false)。这导致不确定的行为,结果序列可以是任何东西。

关于c++ - sort()方法c++中的比较器函数。针对大量数字获取不同的解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57038157/

10-10 12:29