You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重载C++太空船运算符(<=>)以实现逆序排序?

实现逆序排序的operator<=>

你原来的写法错误在于,三路比较运算符(<=>)的返回值是枚举类型(比如std::strong_ordering),直接用!取反逻辑不成立,因为它不是布尔值。

有两种比switch-case更简洁的实现方式:

方法一:交换比较对象

直接将当前对象的i和右操作数的i交换位置进行比较,天然实现逆序:

struct Bar
{
    auto operator<=> (const Bar& rhs) const
    {
        return rhs.i <=> i;
    }
    int i;
};

比如比较Bar{1}和Bar{2}时,实际执行2 <=> 1,返回std::strong_ordering::greater,因此Bar{1} > Bar{2}的结果为true,符合逆序要求。

方法二:对原始比较结果取反

利用C++20三路比较类型支持的一元负运算符,直接反转比较结果:

#include <compare>

struct Bar
{
    auto operator<=> (const Bar& rhs) const
    {
        return -(i <=> rhs.i);
    }
    int i;
};

-(i <=> rhs.i)会将greater转为less,less转为greater,equal保持不变,完美实现逆序逻辑。

这两种方法都无需枚举所有比较情况,代码简洁且符合C++20的语法规范。

内容的提问来源于stack exchange,提问作者Bin Yan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:57:34