C++ 这个类会有严格的弱序吗
假设我有class/structC++ 这个类会有严格的弱序吗,c++,math,stl,C++,Math,Stl,假设我有class/structFoo struct Foo { int a, b; bool operator< (Foo const& r){ return a < r.a; } bool operator== (Foo const& r){ return a==r.a&&b==r.b; } }; Foo bar = { 5, 1 }; Foo baz = { 5, 2 };
Foo
struct Foo {
int a, b;
bool operator< (Foo const& r){
return a < r.a;
}
bool operator== (Foo const& r){
return a==r.a&&b==r.b;
}
};
Foo bar = { 5, 1 };
Foo baz = { 5, 2 };
structfoo{
INTA,b;
bool操作员<(Foo const&r){
返回a
现在bar==baz
为假,但是bar
和baz
也是假
请注意,这里的排序完全忽略
b
,但b
是相等关系的一部分。技术上是的,您是通过a
成员直接排序的,这对于例如std::set
应该很好。基本上,它们的行为类似于整数,即如果a
- 对于所有x,x
- 所有x≠ y、 如果x
- 对于所有x、y和z,如果x
- 对于所有x、y和z,如果x与y不可比,并且y是 与z不可比,那么x与z不可比(的传递性 等价性)
- 所有x≠ y、 如果x
操作符类本身没有弱排序。严格弱序是一个二元函数,如运算符。我认为它对于A
具有严格弱序,只是因为运算符的缘故。这个问题与语义有关。如果!(你为什么不编写一个包含Foo
s向量的程序,对它进行排序,然后看看它的顺序:)@Flame:不完全正确。仅仅因为在操作符下,两件事是“等价的”。定义顺序的是关系/谓词,而不是类。