Skip to content
Related Articles
3-way comparison operator (Space Ship Operator) in C++ 20
• Difficulty Level : Expert
• Last Updated : 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 ``using` `namespace` `std;`` ` `// Driver Code``int` `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;``}`

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 ``using` `namespace` `std;`` ` `// Driver Code``int` `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;``}`

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.

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up