Operador de comparación de 3 vías (Operador de nave espacial) en C++ 20

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

Producción:

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

Producción:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *