The Spaceship Operator and Expression Rewriting

Real-World Examples of <=>

What are some practical examples of using <=> in real-world applications?

Abstract art representing computer programming

The <=> operator in C++20, also known as the spaceship operator, is incredibly useful in real-world applications. Here are some practical examples of how it can be employed:

Example 1: Sorting Complex Data Structures

In applications where you manage collections of complex objects, such as databases or game development, the <=> operator simplifies sorting logic. Consider a Player class in a game that needs to be sorted by score:

#include <algorithm>
#include <compare>
#include <iostream>
#include <string>
#include <vector>

class Player {
 public:
  Player(std::string name, int score)
    : Name{name}, Score{score} {}

  std::strong_ordering operator<=>(
    const Player& Other) const {
    return Score <=> Other.Score;
  }

  std::string Name;
  int Score;
};

int main() {
  std::vector<Player> players{
    {"Alice", 20}, {"Bob", 15}, {"Charlie", 25}
  };

  std::sort(players.begin(), players.end());

  for (const auto& player : players) {
    std::cout << player.Name << " - "
      << player.Score << "\n";
  }
}
Bob - 15
Alice - 20
Charlie - 25

Example 2: File Versioning Systems

In software development, managing file versions is common. The <=> operator helps in comparing version numbers cleanly. Here’s a Version class example:

#include <compare>
#include <iostream>
#include <tuple>

class Version {
 public:
  Version(int major, int minor, int patch)
    : Major{major}, Minor{minor}, Patch{patch} {}

  std::strong_ordering operator<=>(
    const Version& Other) const {
    return std::tie(Major, Minor, Patch) <=>
      std::tie(Other.Major, Other.Minor, Other.Patch);
  }

  bool operator==(const Version& Other) const {
    return std::tie(Major, Minor, Patch) ==
      std::tie(Other.Major, Other.Minor, Other.Patch);
  }

 private:
  int Major, Minor, Patch;
};

int main() {
  Version v1{1, 0, 0};
  Version v2{1, 0, 1};

  if (v1 < v2) {
    std::cout << "v1 is an older version than v2";
  } else if (v1 > v2) {
    std::cout << "v1 is a newer version than v2";
  } else {
    std::cout << "v1 and v2 are the same version";
  }
}
v1 is an older version than v2

Example 3: E-commerce Applications

In e-commerce platforms, comparing and sorting products by price, ratings, or other attributes is crucial. Here’s an example with a Product class:

#include <iostream>
#include <compare>
#include <string>

class Product {
public:
  Product(std::string name, double price)
    : Name{name}, Price{price} {}

  std::partial_ordering operator<=>(
    const Product& Other) const {
    return Price <=> Other.Price;
  }

  std::string Name;
  double Price;
};

int main() {
  Product product1{"Laptop", 999.99};
  Product product2{"Smartphone", 599.99};

  if (product1 > product2) {
    std::cout << product1.Name
      << " is more expensive than "
      << product2.Name;
  } else if (product1 < product2) {
    std::cout << product1.Name
      << " is cheaper than "
      << product2.Name;
  } else {
    std::cout << product1.Name
      << " and " << product2.Name
      << " are the same price";
  }
}
Laptop is more expensive than Smartphone

Conclusion

These examples show how the <=> operator can simplify and enhance the readability and maintainability of code in various real-world applications.

Whether you're managing players in a game, versions of software, or products in an e-commerce platform, the spaceship operator provides a clean and efficient way to handle comparisons.

This Question is from the Lesson:

The Spaceship Operator and Expression Rewriting

A guide to simplifying our comparison operators using C++20 features

Answers to questions are automatically generated and may not have been reviewed.

This Question is from the Lesson:

The Spaceship Operator and Expression Rewriting

A guide to simplifying our comparison operators using C++20 features

A computer programmer
Part of the course:

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Free, unlimited access

This course includes:

  • 125 Lessons
  • 550+ Code Samples
  • 96% Positive Reviews
  • Regularly Updated
  • Help and FAQ
Free, Unlimited Access

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved