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;
}
代码不错
当比较值 x1
和 x2
时,满足规则 2:规则说“如果 x < y,则其他”。由于 IF 部分为假(x1
不小于 x2
),因此整个语句为真。
这就是含义(“IF ... THEN ...”)的工作原理。这是数理逻辑的一个基本规则:当前提条件不满足时,整个命题为真。
我试图通过阅读这篇文章来了解弱排序的工作原理: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;
}
代码不错
当比较值 x1
和 x2
时,满足规则 2:规则说“如果 x < y,则其他”。由于 IF 部分为假(x1
不小于 x2
),因此整个语句为真。
这就是含义(“IF ... THEN ...”)的工作原理。这是数理逻辑的一个基本规则:当前提条件不满足时,整个命题为真。