Оператор 3-стороннего сравнения (оператор космического корабля) в C ++ 20
Оператор трехстороннего сравнения «<=>» называется оператором космического корабля. Оператор космического корабля определяет для двух объектов 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. Таким образом, это полезно для проверки лексикографического порядка, например данных в векторах, списках или других упорядоченных контейнерах.