在C ++中,可以在类bool operator<()
上定义Foo
,像next_permutation()
这样的stdlib算法使用它来推断排序。
但是,仅提供检查Foo
的一个实例是否小于另一个实例的方法,并未提供全面的可能比较。例如,实例可能相同。
是否有支持C ++中所有比较的标准或协议?
这个问题是由Ruby中定义的<=>
“太空船”运算符推动的,如果接收器小于,等于或大于参数,则返回-1,0或1的方法,分别
答案 0 :(得分:4)
使用小于比较器的所有C ++标准函数(和类)都不关心对象是否相等。相反,他们使用“等价”概念定义x
和y
当前且仅当!(x < y) && !(y < x)
时是等效的。如果x < y
是严格弱序,则!(x < y) && !(y < x)
是等价关系。
所以不,没有精确等效的Ruby太空飞船,因为那些C ++操作不接受小于,等于或大于的三分法。但是,你可以很容易地写:
template <typename T>
int spaceship(const T &lhs, const T &rhs) {
if (lhs < rhs) return -1;
if (rhs < lhs) return 1;
return 0;
}
答案 1 :(得分:1)
P0515添加了这个(拼写,很奇怪,<=>
)。它应该是C ++ 2x