3-way comparison operator (Space Ship Operator) in C++ 20 - GeeksforGeeks

24 Nov, 2020
The three-way comparison operator “<=>” is called a spaceship operator. The spaceship operator determines for two objects A and B whether A < B, A = B, or A > B. The spaceship operator or the compiler can auto-generate it for us. Also, a three-way comparison is a function that will give the entire relationship in one query. Traditionally, strcmp() is such a function. Given two strings it will return an integer where,
< 0 means the first string is less
== 0 if both are equal
> 0 if the first string is greater.
It can give one of the three results, hence it’s a three-way comparison.
From the above table, it can be seen that the spaceship operator is a primary operator i.e., it can be reversed and corresponding secondary operators can be written in terms of it.
(A <=> B) < 0 is true if A < B(A <=> B) > 0 is true if A > B(A <=> B) == 0 is true if A and B are equal/equivalent.
Program 1:
Below is the implementation of the three-way comparison operator for two float variables:
C++
// C++ 20 program to illustrate the// 3 way comparison operator#include <bits/stdc++.h>using namespace std;  // Driver Codeint main(){    float A = -0.0;    float B = 0.0;      // Find the value of 3 way comparison    auto ans = A <= > B;      // If ans is less than zero    if (ans < 0)        cout << "-0 is less than 0";      // If ans is equal to zero    else if (ans == 0)        cout << "-0 and 0 are equal";      // If ans is greater than zero    else if (ans > 0)        cout << "-0 is greater than 0";      return 0;}
Output:
Program 2:
Below is the implementation of the three-way comparison operator for two vectors:
C++
// C++ 20 program for the illustration of the// 3-way comparison operator for 2 vectors#include <bits/stdc++.h>using namespace std;  // Driver Codeint main(){    // Given vectors    vector<int> v1{ 3, 6, 9 };    vector<int> v2{ 3, 6, 9 };      auto ans2 = v1 <= > v2;      // If ans is less than zero    if (ans2 < 0) {          cout << "v1 < v2" << endl;    }      // If ans is equal to zero    else if (ans2 == 0) {          cout << "v1 == v2" << endl;    }      // If ans is greater than zero    else if (ans2 > 0) {          cout << "v1 > v2" << endl;    }      return 0;}
Output:
Note: You should download the adequate latest compiler to run C++ 20.
Needs of Spaceship Operators:
It’s the common generalization of all other comparison operators (for totally-ordered domains): >, >=, ==, <=, <. Using <=>, every operation can be implemented in a completely generic way in the case of user-defined data type like a structure where one has to define the other 6 comparison operators one by one instead.
For strings, it’s equivalent to the old strcmp() function of the C standard library. So it is useful for lexicographic order checks, such as data in vectors, or lists, or other ordered containers. 
cpp-operator
Articles
C++
C++ Programs
cpp-operator
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Time Complexity and Space Complexity
Docker - COPY Instruction
Time complexities of different data structures
SQL | Date functions
Difference between Class and Object
Vector in C++ STL
Arrays in C/C++
Initialize a vector in C++ (6 different ways)
Inheritance in C++
Map in C++ Standard Template Library (STL)