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

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.

Equality | Ordering | |

Primary | == | <=> |

Secondary | != | <, >, <=, >= |

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 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 <bits/stdc++.h>` `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.

**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**

**.**