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

标签 c++

在C++中,可以定义bool operator<()上课Foo和标准库算法,如 next_permutation()用它来推断顺序。

但是,仅提供一种方法来检查 Foo 是否有一个实例小于另一个,不提供所有可能的比较。例如,实例可能相等。

在 C++ 中是否有支持全方位比较的标准或协议(protocol)?

这个问题的动机是 <=> Ruby 中定义的“宇宙飞船”运算符,如果接收者分别小于、等于或大于参数,它是一种返回 -1、0 或 1 的方法。

最佳答案

所有使用小于比较器的 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;
}

关于c++ - C++ 中的全范围比较运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182006/

相关文章:

c++ - 物体轮廓上的opencv角点检测

c++ - sqlite3_open - 检查文件是否为 sqlite3 数据库时出现问题

c++ - 为方法提供一个空实例是一种好习惯吗?

c++ - 模板内的继承 - 公共(public)成员变得不可见?

c++ - 为什么 C++ 编译需要这么长时间?

c++ - live555 onDemandServer 流式传输多播

c++ - CryptImportKey Windows 8.1 使用 AES_256 PLAINTEXTKEYBLOB

c++ - 如何在特定对象的特定方法中设置断点?

c++ - 自 Mojave 以来,链接在 Homebrew 软件的 cmake 中不起作用

c++ - 我可以声明一个位表吗?