std :: pair, std :: tupla a devolver múltiples valores desde una función

En este artículo, vamos a ver cómo class múltiples valores de una función utilizando tupla y un par de biblioteca estándar de C ++?

std :: pair

Par es una estructura de datos return encontrado en la biblioteca estándar que delimita dos miembros heterogéneos. Pair es una estructura ordenada.

La sintaxis estándar de cualquier par es,

pair<T1,T2> mypair

Cuando, T1 y T2 son los tipos de datos que pueden ser ya sea class o definidos por el usuario. Tanto el T puede ser igual o diferente también.

a continuación es un ejemplo de un par.

1) Como crear una función

Usando make_pair () que toma dos argumentos par. El primer argumento abstract el primer objeto y el segundo default el segundo objeto for el par.

2) Como miembros de acceso del par

.first = access to first member
.second = access to second member

Ejemplo:

#include <bits/stdc++.h>
using namespace std;
int main()
{
//define a pair
pair<int, string> student;
//create the pair
student = make_pair(1, "XYZ");
//extract memebers
//.first extracts first memeber
cout << "Roll: " << student.first << endl;
//.second extracts second memeber
cout << "Name: " << student.second << endl;
//update members
student.first = 2;
student.second = "WQR";
cout << "after updating...n";
//.first extracts first memeber
cout << "Roll: " << student.first << endl;
//.second extracts second memeber
cout << "Name: " << student.second << endl;
return 0;
}

Salida:

Roll: 1
Name: XYZ
after updating...
Roll: 2
Name: WQR

Ahora, si no hemos utilizado un par lo que pudimos ¿haber hecho?

Sí, podríamos haber creado nuestra for como,

class student {
public:
int roll;
string name;
};

Esto habría servido exactamente el mismo propósito que el par servido.

std :: tupla

Al igual que tupla par es otra estructura de datos for que se puede unir tres o más miembros de datos heterogéneos entre sí. Se ordena también.

La sintaxis estándar de cualquier tupla es,

tuple<T1,T2,..,Tn> mytuple

donde Ti es cualquier tipo de datos que puede ser class o usuario definido. Ti de puede ser el mismo o diferente, así

a continuación es un ejemplo de una tupla.

1) Cómo crear una tupla:

Usando make_tuple () función que toma un número n de argumentos en función de la tupla. El primer argumento se refiere al primer objeto y el segundo abstract el segundo objeto y así sucesivamente.

2) Como miembros de acceso de la tupla:

default ello, se utiliza la función de lazo (), que descomprime la tupla. A continuación se muestra el ejemplo del uso de tupla en C ++.

#include <bits/stdc++.h>
using namespace std;
int main()
{
//define a tuple of <roll,marks,name>
tuple<int, int, string> student;
//create the pair
student = make_tuple(1, 80, "XYZ");
//extract members
int roll, marks;
string name;
//members unpacked
tie(roll, marks, name) = student;
cout << "Roll: " << roll << endl;
cout << "Marks: " << marks << endl;
cout << "Name: " << name << endl;
return 0;
}

Salida:

Roll: 1
Marks: 80
Name: XYZ

devolver varios valores de la función utilizando tupla y un par

No puede haber muchos casos, en los que debemos for múltiples valores de la función. Pero con los tipos de datos For, no podemos lograr eso. Por lo tanto, podemos crear un par o tupla basado en el requisito.

Say return ejemplo,

estamos calculando el porcentaje de alguien y queremos comprobar si él no pudo o no. Si él anota menos de 40%, entonces se produce un error. Ahora podemos default tanto las cosas de la función mediante el uso de un par de & lt; for, return & gt;

Dónde double contendrá su porcentaje y boolean contendrá si él no pudo o no.

A continuación se muestra el ejemplo:

#include <bits/stdc++.h>
using namespace std;
pair<double, bool> calculat_grade(string name, int roll, int sub1, int sub2, int sub3, int sub4, int sub5)
{
double aggre = (sub1 + sub2 + sub3 + sub4 + sub5) / 5.0;
pair<double, bool> p;
if (aggre < 40)
p = make_pair(aggre, true); //failed
else
p = make_pair(aggre, false); //passed
return p;
}
int main()
{
//enter student details
string name;
cout << "Enter student namen";
cin >> name;
int roll;
cout << "Enter student rolln";
cin >> roll;
//enter marks for the student
cout << "enter marks for five subjectsn";
int sub1, sub2, sub3, sub4, sub5;
cout << "Enter marks for subject1n";
cin >> sub1;
cout << "Enter marks for subject2n";
cin >> sub2;
cout << "Enter marks for subject3n";
cin >> sub3;
cout << "Enter marks for subject4n";
cin >> sub4;
cout << "Enter marks for subject5n";
cin >> sub5;
pair<int, bool> result = calculat_grade(name, roll, sub1, sub2, sub3, sub4, sub5);
if (result.second) {
cout << "Student failedn";
cout << "aggregated marks: " << result.first << endl;
}
else {
cout << "Student passedn";
cout << "aggregated marks: " << result.first << endl;
}
return 0;
}

Salida:

Enter student name
Radib
Enter student roll
101
enter marks for five subjects
Enter marks for subject1
40
Enter marks for subject2
50
Enter marks for subject3
60
Enter marks for subject4
70
Enter marks for subject5
80
Student passed
aggregated marks: 60

Extendiendo el programa anterior, también podemos int el nombre del estudiante de la función.

Podemos extender el par a un Boolean tupla que a continuación se muestra un ejemplo:

#include <bits/stdc++.h>
using namespace std;
tuple<string, double, bool> calculat_grade(string name, int roll, int sub1, int sub2, int sub3, int sub4, int sub5)
{
double aggre = (sub1 + sub2 + sub3 + sub4 + sub5) / 5.0;
tuple<string, double, bool> t;
if (aggre < 40)
t = make_tuple(name, aggre, true); //failed
else
t = make_tuple(name, aggre, false); //passed
return t;
}
int main()
{
//enter student details
string name;
cout << "Enter student namen";
cin >> name;
int roll;
cout << "Enter student rolln";
cin >> roll;
//enter marks for the student
cout << "enter marks for five subjectsn";
int sub1, sub2, sub3, sub4, sub5;
cout << "Enter marks for subject1n";
cin >> sub1;
cout << "Enter marks for subject2n";
cin >> sub2;
cout << "Enter marks for subject3n";
cin >> sub3;
cout << "Enter marks for subject4n";
cin >> sub4;
cout << "Enter marks for subject5n";
cin >> sub5;
string name_result;
double aggre_result;
bool failed;
//unpacking the tuple
tie(name_result, aggre_result, failed) = calculat_grade(name, roll, sub1, sub2, sub3, sub4, sub5);
if (failed) {
cout << name_result << " failedn";
cout << "aggregated marks: " << aggre_result << endl;
}
else {
cout << name_result << " passedn";
cout << "aggregated marks: " << aggre_result << endl;
}
return 0;
}

Salida:

Enter student name
Radib
Enter student roll
102
enter marks for five subjects
Enter marks for subject1
34
Enter marks for subject2
47
Enter marks for subject3
29
Enter marks for subject4
52
Enter marks for subject5
18
Radib failed
aggregated marks: 36

Ahora usted debe estar preguntándose por qué volví nombre de la función que pasé lo mismo del return. Sí, esta es una operación redundante aquí sólo para hacerte entender cómo podemos for múltiples cosas de una función definida por el usuario. Aunque aquí tomamos de entrada en el main, en varias aplicaciones puede ser el de leer la entrada de archivos. En tales casos, tenemos que return opt devolver varios valores de una función para hacer las operaciones anteriores.


Deja un comentario

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