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:
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
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
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
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.
Answers to questions are automatically generated and may not have been reviewed.
A guide to simplifying our comparison operators using C++20 features