Cuando uso el algoritmo de clasificación STL en un vector, quiero pasar mi propia función de comparación que también toma un parámetro.Pasar un parámetro a una función de comparación?
Por ejemplo, lo ideal es que quieren hacer una declaración de función local, como:
int main() {
vector<int> v(100);
// initialize v with some random values
int paramA = 4;
bool comp(int i, int j) {
// logic uses paramA in some way...
}
sort(v.begin(), v.end(), comp);
}
Sin embargo, el compilador se queja de eso. Cuando intento algo como:
int main() {
vector<int> v(100);
// initialize v with some random values
int paramA = 4;
struct Local {
static bool Compare(int i, int j) {
// logic uses paramA in some way...
}
};
sort(v.begin(), v.end(), Local::Compare);
}
El compilador todavía se queja: "Error: el uso del parámetro de la función que contiene"
¿Qué debo hacer? ¿Debo hacer algunas variables globales con una función de comparación global ...?
Gracias.
El tercer parámetro es cualquier cosa que se puede llamar utilizando la sintaxis de llamada de función. Entonces, tanto una función como una clase/estructura que define 'operator()' harán el truco. –
@Eugen: Buen punto, he actualizado mi respuesta para reflejar eso. –
Gracias, eso está funcionando (excepto que el compilador se queja a menos que mueva la declaración struct fuera de la función principal. Pensé que se nos permitía declarar clases y estructuras localmente ...?) – George41