Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Algoritmos con deques C++

Estas en el tema de Algoritmos con deques C++ en el foro de C/C++ en Foros del Web. Buenas a todos, Me gustaría saber como puedo conseguir implementar el algoritmo de máximo y mínimo en c++ con un deque<datoSensor>, donde datoSensor es una ...
  #1 (permalink)  
Antiguo 21/10/2015, 12:44
eba
 
Fecha de Ingreso: octubre-2015
Mensajes: 1
Antigüedad: 9 años
Puntos: 0
Algoritmos con deques C++

Buenas a todos,

Me gustaría saber como puedo conseguir implementar el algoritmo de máximo y mínimo en c++ con un deque<datoSensor>, donde datoSensor es una clase formada por 3 variables. No consigo que me salga y no se si tan siquiera se puede.

Muchas gracias.
  #2 (permalink)  
Antiguo 21/10/2015, 13:08
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 8 meses
Puntos: 3
Respuesta: Algoritmos con deques C++

Me interesa porque no se que es eso de deque.
  #3 (permalink)  
Antiguo 21/10/2015, 15:11
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 8 meses
Puntos: 27
Respuesta: Algoritmos con deques C++

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 original
  1. class datoSensor{
  2.   int a, b, c;
  3.  public:
  4.    datoSensor(int &A, int &B, int &C){ // Constructor ejemplo
  5.       this->a=A;
  6.       this->b=B;
  7.       this->c=C;
  8.    }
  9.    /* Lo que sea que tengas*/
  10.   ...
  11.   bool operator<(const datoSensor &d){
  12.     // Aquí sustituye el código por el que corresponda a la relación de orden de tu clase
  13.     return this->a < d.a;
  14.   }
  15. };

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
  1. #include <algorithm>
  2. #include <deque>
  3. #include <iostream>
  4. using namespace std;
  5. class datoSensor{
  6.   int a, b, c;
  7.  public:
  8.    datoSensor(int &A, int &B, int &C){ // Constructor ejemplo
  9.       this->a=A;
  10.       this->b=B;
  11.       this->c=C;
  12.    }
  13.    int getA() const{
  14.      return this->a;
  15.    }
  16.    /* Lo que sea que tengas*/
  17.   ...
  18.   bool operator<(const datoSensor &d){
  19.     // Aquí sustituye el código por el que corresponda a la relación de orden de tu clase
  20.     return this->a < d.a;
  21.   }
  22. };
  23.  
  24. int main(){
  25.     datoSensor d1(1,2,3);
  26.     datoSensor d2(-3,2,1);
  27.     datoSensor d3(-2,-3,70);
  28.     deque<datoSensor> d({d1,d2,d3});
  29.     deque<datoSensor>::iterator it=min_element(d.begin(),d.end());
  30.     cout << it->getA(); // Obviamente da -3
  31. }

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.

Última edición por xKuZz; 21/10/2015 a las 15:14 Razón: Se me olvidó el máximo
  #4 (permalink)  
Antiguo 21/10/2015, 16:14
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 8 meses
Puntos: 3
Respuesta: Algoritmos con deques C++

deque es alguna palabra reservada?
  #5 (permalink)  
Antiguo 22/10/2015, 02:06
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Algoritmos con deques C++

Cita:
Iniciado por aguml Ver Mensaje
deque es alguna palabra reservada?
Palabra reservada no, es un template de la STL :

http://www.cplusplus.com/reference/deque/deque/

Etiquetas: algoritmos, c++, programacion, stl
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:31.