Sobrecarga de operadores en C++ para imprimir contenido de vector, mapa, par, ..

La sobrecarga de operadores es una de las características de la programación orientada a objetos que brinda una capacidad adicional a un operador para actuar sobre un operando definido por el usuario (Objetos).
Podemos aprovechar esa función al depurar el código, especialmente en la programación competitiva . Todo lo que tenemos que hacer es sobrecargar el operador de inserción de flujo (consulte este artículo para comprender más) «<<« para imprimir la clase de vector, mapa, conjunto, par, etc. Por ejemplo,

Vector

// C++ program to print vector objects
// by overloading "<<" operator
#include <iostream>
#include <vector>
using namespace std;
  
// C++ template to print vector container elements
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
  
// Driver code
int main()
{
    vector<int> vec{ 4, 2, 17, 11, 15 };
  
    // Printing the elements directly
    cout << vec;
     
    return 0;
}
Output
[4, 2, 17, 11, 15]

Establecer

// C++ program to print set elements
// by overloading "<<" operator
#include <iostream>
#include <set>
using namespace std;
  
// C++ template to print set container elements
template <typename T>
ostream& operator<<(ostream& os, const set<T>& v)
{
    os << "[";
    for (auto it : v) {
        os << it;
        if (it != *v.rbegin())
            os << ", ";
    }
    os << "]\n";
    return os;
}
  
// Driver code
int main()
{
    set<int> st{ 4, 2, 17, 11, 15 };
    cout << st;
    return 0;
}
Output
[2, 4, 11, 15, 17]

Mapa

// C++ program to print map elements
// by overloading "<<" operator
#include <iostream>
#include <map>
using namespace std;
  
// C++ template to print map container elements
template <typename T, typename S>
ostream& operator<<(ostream& os, const map<T, S>& v)
{
    for (auto it : v) 
        os << it.first << " : " 
           << it.second << "\n";
      
    return os;
}
  
// Driver code
int main()
{
    map<char, int> mp;
    mp['b'] = 3;
    mp['d'] = 5;
    mp['a'] = 2;
  
    cout << mp;
}
Output
a : 2
b : 3
d : 5

Par

// C++ program to print pair<> class
// by overloading "<<" operator
#include <iostream>
using namespace std;
  
// C++ template to print pair<>
// class by using template
template <typename T, typename S>
ostream& operator<<(ostream& os, const pair<T, S>& v)
{
    os << "(";
    os << v.first << ", " 
       << v.second << ")";
    return os;
}
  
// Driver code
int main()
{
    pair<int, int> pi{ 45, 7 };
    cout << pi;
    return 0;
}
Output
(45, 7)

Como podemos ver desde arriba, la impresión o la depuración serían más fáciles ya que no necesitamos escribir el bucle extra for o la declaración de impresión . Todo lo que necesitamos para escribir el nombre del contenedor específico después del operador de inserción «<<» de cout.
Ejercicio: Ahora diseñemos su propia plantilla con sobrecarga de operadores para otra clase de contenedor de acuerdo con sus requisitos.

Este artículo es una contribución de Shubham Bansal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *