El operador de comparación de tres vías “<=>” se llama operador de nave espacial. El operador de la nave espacial determina para dos objetos A y B si A < B, A = B o A > B. El operador de la nave espacial o el compilador pueden generarlo automáticamente para nosotros. Además, una comparación de tres vías es una función que proporcionará la relación completa en una sola consulta. Tradicionalmente, strcmp() es una función de este tipo. Dadas dos strings, devolverá un número entero donde,
- < 0 significa que la primera string es menor
- == 0 si ambos son iguales
- > 0 si la primera string es mayor.
Puede dar uno de los tres resultados, por lo tanto, es una comparación de tres vías.
Igualdad | ordenar | |
Primario | == | <=> |
Secundario | != | <, >, <=, >= |
De la tabla anterior, se puede ver que el operador de la nave espacial es un operador principal, es decir, se puede invertir y los operadores secundarios correspondientes se pueden escribir en términos de él.
(A <=> B) < 0 es verdadero si A < B
(A <=> B) > 0 es verdadero si A > B
(A <=> B) == 0 es verdadero si A y B son iguales/equivalentes .
Programa 1 :
A continuación se muestra la implementación del operador de comparación de tres vías para dos variables flotantes:
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; }
Programa 2 :
A continuación se muestra la implementación del operador de comparación de tres vías para dos vectores:
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; }
Nota: debe descargar el último compilador adecuado para ejecutar C++ 20.
Necesidades de los operadores de naves espaciales :
- Es la generalización común de todos los demás operadores de comparación (para dominios totalmente ordenados): >, >=, ==, <=, <. Usando <=> , cada operación se puede implementar de una manera completamente genérica en el caso del tipo de datos definido por el usuario como una estructura en la que uno tiene que definir los otros 6 operadores de comparación uno por uno.
- Para strings, es equivalente a la antigua función strcmp() de la biblioteca estándar de C. Por lo tanto, es útil para verificaciones de orden lexicográfico, como datos en vectores , listas u otros contenedores ordenados .
Publicación traducida automáticamente
Artículo escrito por parthbanathia y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA