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

C++20中是否存在对应三路比较运算符<=>的std::less等价物?

C++20中适配三路比较运算符<=>的工具

C++20确实提供了适配三路比较运算符<=>的标准工具——std::compare_three_way,它定义在<compare>头文件中。这个函数对象会直接调用参数的三路比较运算符,返回对应的比较类别类型(如std::strong_ordering、std::weak_ordering或std::partial_ordering),而非像std::less那样返回布尔值。

如果你想定义一个支持自定义比较器的数据结构,类似std::map或std::unordered_map的模板参数设计,可以将std::compare_three_way作为默认比较器。示例代码如下:

#include <compare>

template <typename Key, typename Value, typename Compare = std::compare_three_way>
struct MyContainer {
    // 使用默认或自定义比较器进行键的三路比较
    auto compare_keys(const Key& lhs, const Key& rhs) const {
        return Compare{}(lhs, rhs);
    }

    // 基于三路比较结果实现判断逻辑(比如判断lhs是否小于rhs)
    bool is_less(const Key& lhs, const Key& rhs) const {
        return compare_keys(lhs, rhs) < 0;
    }

    // 容器的其他成员实现...
};

需要注意的是:

  • std::compare_three_way要求Key类型必须支持三路比较运算符<=>,否则会触发编译错误。
  • 如果你的容器只需要严格弱序的布尔比较(类似std::map的需求),std::less在C++20中仍然可用——当Key类型定义了<=>时,编译器会自动合成对应的operator<,std::less会间接利用三路比较实现逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:10:52