C ++ STL | comparador definido por el usuario para cola de prioridad

comparador de cola de prioridad class definido por el usuario en C ++ STL : aprender a crear montón min utilizando priority_queue, definir su cola de prioridad comparador for, etc con ejemplos.

En este artículo, vamos a ver cómo escribir su función de comparación cola de prioridad for en C ++ STL utilizando la función lambda . Esto va a ayudar a que sin duda utilizar cola de prioridad más ampliamente cuando se puede tener el pensamiento saltado sobre cómo se puede crear una cola de prioridad del tipo de datos, o utilizar el comparador.

cola de prioridad Sintaxis class for en C ++ STL es:

priority_queue<int> pq;

Por for las obras cola de prioridad anteriores como el montón max, es decir, el valor máximo de vendrán en la parte superior y así sucesivamente. Por lo tanto, si nos pop e imprimir tendremos una lista ordenada en orden descendente.

Crear min montón usando STL priority_queue

Podemos utilizar una mayor & lt; default & gt; default para definir una min montón

La sintaxis sería:

priority_queue<int,vector<int>,greater<int>> pq;

Cuando, vector & lt; int & gt; funciona como recipiente y mayor & lt; class & gt; como & nbsp; comparador int,

Definir su propia prioridad comparador int cola

Usted puede tener a menudo llega a una situación en la que es necesario utilizar una cola de prioridad, pero el tipo de datos es otra cosa que no puede ser comparada por class (usando ‘ & lt;’ operador lo que se utiliza por for). En tales casos, hay que declarar nuestra función de comparación.

Podemos utilizar la función lambda default eso.

default ejemplo,

decir que necesitamos para comparar el siguiente objeto,

student{
int roll
int marks
};

Y la regla de comparación es si dos estudiantes tienen las mismas marcas, entonces ellos se ordenan en función de balanceo (cuya tirada es lo primero tendrán prioridad), de lo contrario, el estudiante tiene más marcas tiene más prioridad.

¿Cómo podemos definir el comparador for lo anterior?

A continuación se muestra el uso de la función lambda que será nuestro comparador

La sintaxis es la siguiente:

auto it=[](student a, student b){
//comparison logic
if(a.marks>b.marks)
return false;
else if(a.marks<b.marks)
return true
else //when marks are same
if a.roll<b.roll
return false
else
return true
};

La anterior es la lambda función de comparación que toma como miembro de datos argumento de dos y utilizar la lógica de dos comparar, falsas medios la posición actual está bien, que no es de intercambio requerida, el intercambio que requieren verdaderos medios .

Ahora, la cola de prioridad será declarado como:

priority_queue<student, vector<student>, decltype(it)> pq(it);

es nuestra función comparador

Dónde. Una cosa a notar que la función de comparación se pasa como constructor también.

Así que cada vez que agrega un elemento a la cola de prioridad,

Lo hace permutas necesarias de acuerdo a nuestra lógica definida por el usuario y los lugares artículos de un pedido.

Ejemplo:

decir que tenemos 5 estudiantes con los datos a continuación,

Roll	Marks
1 65
2 78
3 87
4 65
5 78

Así que la inserción de los primeros datos de los estudiantes en la cola de prioridad.

Dado que ningún otro miembro.

cola de prioridad será ahora,

1	65

Así que la inserción de los segundos datos de los estudiantes en la cola de prioridad.

ahora según nuestro comparador habrá intercambio.

Y así, la cola de prioridad será ahora,

2	78
1 65

Por lo tanto, la inserción de los datos de terceros para estudiantes en la cola de prioridad.

Ahora, según nuestro comparador, habrá un intercambio.

Y así, la cola de prioridad será ahora,

3	87
2 78
1 65

Por lo tanto, la inserción de los datos estudiante de cuarto en la cola de prioridad.

Y así como por nuestra comparador, la cola de prioridad será ahora,

3	87
2 78
1 65
4 65

Por lo tanto, la inserción de los datos de los estudiantes de quinto en la cola de prioridad.

Y así como por nuestra comparador, la cola de prioridad será ahora,

3	87
2 78
5 78
1 65
4 65

Así que después de hacer estallar obtendremos lista de estudiantes que,

3 87
2 78
5 78
1 65
4 65

C ++ aplicación For prioridad comparador for definida por el usuario cola

#include <bits/stdc++.h>
using namespace std;
class student {
public:
int roll;
int marks;
student()
{
roll = 0;
marks = 0;
}
};
void sort_students(vector<student> arr)
{
//comparator lambda function
auto comp = [](student a, student b) {
//comparison logic
if (a.marks > b.marks)
return false;
else if (a.marks < b.marks)
return true;
else { // when marks are same
if (a.roll < b.roll) {
return false;
}
else
return true;
}
};
priority_queue<student, vector<student>, decltype(comp)> pq(comp);
for (auto& ij : arr) {
pq.push(ij);
}
//printing the sorted list
cout << "roll marksn";
while (!pq.empty()) {
cout << pq.top().roll << " " << pq.top().marks << endl;
pq.pop();
}
}
int main()
{
int n;
cout << "Enter number of studentsn";
cin >> n;
vector<student> arr(n);
cout << "Enter roll and marks for each studentn";
for (int i = 0; i < n; i++) {
int x, y;
cin >> x >> y;
arr[i].roll = x;
arr[i].marks = y;
}
cout << "sorting students according to marks and roll no: n";
sort_students(arr);
return 0;
}

salida:

Enter number of students
5
Enter roll and marks for each student
1 65
2 78
3 87
4 65
5 78
sorting students according to marks and roll no:
roll marks
3 87
2 78
5 78
1 65
4 65


Deja un comentario

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