在C++中,可以定义bool operator<()
上课Foo
和标准库算法,如 next_permutation()
用它来推断顺序。
但是,仅提供一种方法来检查 Foo
是否有一个实例小于另一个,不提供所有可能的比较。例如,实例可能相等。
在 C++ 中是否有支持全方位比较的标准或协议(protocol)?
这个问题的动机是 <=>
Ruby 中定义的“宇宙飞船”运算符,如果接收者分别小于、等于或大于参数,它是一种返回 -1、0 或 1 的方法。
最佳答案
所有使用小于比较器的 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;
}
关于c++ - C++ 中的全范围比较运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182006/