Si no estás acostumbrado quizás te cuesta aunque no creo. Vamos a utilizar la función genérica min_element. Esta función es un template y por tanto te servirá para todo contenedor de la STL. A esta función o bien le pasas los dos iteradores como parámetros y sobrecargas el operador < o bien les pasas los dos iteradores y un functor. Yo te voy a explicar como hacerlo sobrecargando el operador <.
El ejemplo que te voy a dar es muy completo y voy a adaptarlo a tu problema para que lo veas con facilidad y no creo que tengas problemas al aplicarlo.
Supongamos una clase datoSensor como la siguiente y que la relación de orden está de ambas clases está definida por el orden usual del entero a, es decir, dados dos objetos uno es menor que otro si el a del primero es menor que el a del segundo.
Código C++:
Ver originalclass datoSensor{
int a, b, c;
public:
datoSensor(int &A, int &B, int &C){ // Constructor ejemplo
this->a=A;
this->b=B;
this->c=C;
}
/* Lo que sea que tengas*/
...
bool operator<(const datoSensor &d){
// Aquí sustituye el código por el que corresponda a la relación de orden de tu clase
return this->a < d.a;
}
};
Mientras tengamos ese operador definido podemos utilizar la función min_element(iterarador inicial, iterador final). Como en este caso vamos a recorrer el deque entero lo hacemos desde el iterador begin() hasta el iterador end().
Esta función te devuelve un iterador (llamémosle it) a dicho dato a sí que si quieres acceder a algún método de tu clase debes haces:
it->MetodoClase();
Si quieres pasar la clase entera por valor obviamente *it;
Veamos por tanto un ejemplo del funcionamiento de min_element en un deque
Código C++:
Ver original#include <algorithm>
#include <deque>
#include <iostream>
using namespace std;
class datoSensor{
int a, b, c;
public:
datoSensor(int &A, int &B, int &C){ // Constructor ejemplo
this->a=A;
this->b=B;
this->c=C;
}
int getA() const{
return this->a;
}
/* Lo que sea que tengas*/
...
bool operator<(const datoSensor &d){
// Aquí sustituye el código por el que corresponda a la relación de orden de tu clase
return this->a < d.a;
}
};
int main(){
datoSensor d1(1,2,3);
datoSensor d2(-3,2,1);
datoSensor d3(-2,-3,70);
deque<datoSensor> d({d1,d2,d3});
deque<datoSensor>::iterator it=min_element(d.begin(),d.end());
cout << it->getA(); // Obviamente da -3
}
Análogamente para el máximo max_element(iterador_inicial,iterador_final).
max_element también utiliza el operador < así que no necesitas nada más.
Espero que se entienda con facilidad. Saludos.