⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

C++20 三向比较:太空船运算符

学习operator<=>和std::compare_three_way,自动生成比较运算符。 · 难度:入门 · +15XP

三向比较简介

C++20引入了三向比较运算符operator<=>(称为太空船运算符),它返回一个比较类型,可同时表示小于、等于或大于。编译器可以自动生成所有比较运算符。

基本用法

#include <compare>
#include <iostream>

struct Point { int x, y; auto operator<=>(const Point&) const = default; // 自动生成所有比较 };

int main() { Point a{1, 2}, b{1, 3}; std::cout << (a < b) << ' '; // true std::cout << (a == b) << ' '; // false std::cout << (a >= b) << ' '; // false auto cmp = a <=> b; if (cmp < 0) std::cout << "a小于b "; else if (cmp == 0) std::cout << "相等 "; else std::cout << "a大于b "; }

返回类型

类型含义
std::strong_ordering全序,可替换(如整数)
std::weak_ordering全序,不可替换(如大小写不敏感字符串)
std::partial_ordering偏序,允许不可比较(如浮点数NaN)

自定义比较

struct CaseInsensitiveString {
    std::string s;
    auto operator<=>(const CaseInsensitiveString& other) const {
        // 自定义比较逻辑
        auto cmp = std::lexicographical_compare_three_way(
            s.begin(), s.end(), other.s.begin(), other.s.end(),
            [](char a, char b) {
                return std::toupper(a) <=> std::toupper(b);
            });
        return cmp;
    }
    bool operator==(const CaseInsensitiveString& other) const {
        return *this <=> other == 0;
    }
};

练习提示

定义一个Student结构体,包含姓名和分数,实现三向比较运算符,优先按分数降序,然后按姓名升序。在main中创建vector并排序。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 105 篇
0 完成
🔥 0