Оператор 3-стороннего сравнения (оператор космического корабля) в C ++ 20

Опубликовано: 16 Декабря, 2021

Оператор трехстороннего сравнения «<=>» называется оператором космического корабля. Оператор космического корабля определяет для двух объектов A и B , A <B, A = B или A> B. Оператор космического корабля или компилятор могут автоматически сгенерировать его для нас. Кроме того, трехстороннее сравнение - это функция, которая выдает все отношения в одном запросе. Традиционно такой функцией является strcmp (). Учитывая две строки, он вернет целое число, где,

  • <0 означает, что первая строка меньше
  • == 0, если оба равны
  • > 0, если первая строка больше.

Он может дать один из трех результатов, следовательно, это трехстороннее сравнение.

Равенство Заказ
Начальный == <=>
Вторичный знак равно <,>, <=,> =

Из приведенной выше таблицы можно увидеть, что оператор космического корабля является первичным оператором, то есть его можно перевернуть, и соответствующие вторичные операторы могут быть записаны в его терминах.

(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.

Программа 1 :

Ниже представлена реализация оператора трехстороннего сравнения для двух переменных с плавающей запятой:

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;
}

Выход:

Программа 2 :

Ниже представлена реализация оператора трехстороннего сравнения для двух векторов:

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;
}

Выход:

Примечание. Для запуска C ++ 20 необходимо загрузить последнюю версию компилятора.

Потребности операторов космических кораблей :

  • Это общее обобщение всех других операторов сравнения (для полностью упорядоченных доменов): >,> =, ==, <=, <. Используя <=> , каждая операция может быть реализована полностью универсальным способом в случае определяемого пользователем типа данных, такого как структура, где вместо этого нужно определять другие 6 операторов сравнения один за другим.
  • Для строк это эквивалентно старой функции strcmp () стандартной библиотеки C. Таким образом, это полезно для проверки лексикографического порядка, например данных в векторах, списках или других упорядоченных контейнерах.
Хотите узнать больше о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровней C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .