c ++:std::sort如何基于弱排序原则创建相等元素的向量

c++ : How does std::sort a vector of equal elements based on weak ordering principle

我试图通过阅读这篇文章来了解弱排序的工作原理:https://medium.com/@shiansu/strict-weak-ordering-and-the-c-stl-f7dcfa4d4e07

主要的收获是:

那么对于严格的弱排序我们必须有 对于所有 x:

x < x is never true, everything should be equal to itself
If x < y then y < x cannot be true
If x < y and y < z then x < z, the ordering should be transitive
If x == y and y == z then x == z, equality should be transitive

下面的代码如何工作? 例如,如果有人比较 x1 和 x2,我的比较函数对于 func(x1,x2) 和 func(x2,x1) 都将为 return false。然后弱排序被打破,因为我认为第 2 条规则被打破了。我的理解有误吗?

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct x
{
    int a ;
    x()
    {
        a = 3;
    }
};
bool func(const x& x1,const x& x2)
{
    if (x1.a < x2.a )
      return true;
      
    return false;
}
int main()
{
   cout << "Hello World" << endl; 
   std::vector<x> vec;
   x x1 , x2, x3 , x4 , x5, x6, x7;
   x1.a = 5;
   x2.a = 5;
   x3.a = 5;
   x7.a = 5;
   vec.push_back(x1);
   vec.push_back(x2);
   vec.push_back(x3);
   vec.push_back(x4);
   vec.push_back(x5);
   vec.push_back(x6);
   vec.push_back(x7);
   
   std::sort (vec.begin(), vec.end(), func);
   
   return 0;
}

代码不错

当比较值 x1x2 时,满足规则 2:规则说“如果 x < y,则其他”。由于 IF 部分为假(x1 不小于 x2),因此整个语句为真。

这就是含义(“IF ... THEN ...”)的工作原理。这是数理逻辑的一个基本规则:当前提条件不满足时,整个命题为真。