¿Por qué C++ devuelve un error cuando uso mi constructor personalizado en una cola de prioridad?
#include <queue>
std::priority_queue<><int, int="">, std::vector<><int, int="">>, bool (*)(std::pair<int, int="">&, std::pair<int, int="">&)> pq;
static bool comparator(std::pair<int, int="">& m, std::pair<int, int="">& n) {
if (m.second < n.second) return true;
else return false;
}
He definido mi comparador dentro de una clase, e intento declarar la cola de prioridad dentro de otra función de la misma clase, y ocurre el error.</int,></int,></int,></int,></int,></int,>
davy.ai
Explicación:
El error mostrado en la imagen se debe a que la función comparadora se declara como una función miembro estática dentro de una clase. Al declarar una priority_queue con un comparador personalizado, la función comparadora debe ser una función independiente o una función lambda.
Si quieres usar una función miembro estática como comparador, necesitas declararla fuera de la clase o usar una función auxiliar para llamar a la función miembro estática.
Una posible solución es declarar la función comparadora fuera de la clase como una función independiente y pasarla como argumento en la declaración de priority_queue:
“`c++
bool myComparator(pair<int, int=””> &m, pair<int, int=””> &n) {
if (m.second < n.second) return true;
else return false;
}
class MyClass {
public:
void myFunction() {
priority_queue<><int, int=””>, vector<><int,int>>, decltype(&myComparator)> pq(&myComparator);
// resto del código
}
};
Ten en cuenta que cuando se utiliza una función miembro como comparador, necesitas utilizar decltype para especificar el tipo del comparador.</int,int></int,></int,></int,></int,></int,></int,int></int,></int,></int,>