C ++中的全范围比较运算符?

时间:2013-11-24 22:36:56

标签: c++

在C ++中,可以在类bool operator<()上定义Foo,像next_permutation()这样的stdlib算法使用它来推断排序。

但是,仅提供检查Foo的一个实例是否小于另一个实例的方法,并未提供全面的可能比较。例如,实例可能相同。

是否有支持C ++中所有比较的标准或协议?

这个问题是由Ruby中定义的<=>“太空船”运算符推动的,如果接收器小于,等于或大于参数,则返回-1,0或1的方法,分别

2 个答案:

答案 0 :(得分:4)

使用小于比较器的所有C ++标准函数(和类)都不关心对象是否相等。相反,他们使用“等价”概念定义xy当前且仅当!(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