tengo un vector con referencias distintas, ejemplo S006,S005 y cada una de ellas varias lecturas, de forma que yo meto una referencia por teclado, y tengo que almacenar las lectura en un nuevo vector, ordenarlo para posteriormente sacar su mediana e imprimirla por pantalla.
tengo un error a la hora creo de las direcciones de memoria y punteros
void Mediana(std::vector<Sensor> &v)
{
std::vector<double> med;
std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
std::cout <<"~~~~~~~~~~~~~~~ MOSTRAR LA MEDIANA DE LOS VALORES DE UN SENSOR ~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
std::string refMediana;
std::cout <<"\t Introduzca la cadena de referencia del sensor que desee: ";
std::cin>> refMediana;
std::cout<<std::endl;
double mediana;
int num_elements=med.size();
int elemento_mediana;
for(auto s:v)
if(refMediana==s.referencia)
med.push_back(s.lectura);
if(num_elements%2!=0)
elemento_mediana=num_elements/2;
std::sort(med.begin(),med.end(),comparaValores);
mediana=med[elemento_mediana];
std::cout <<"\t La mediana de los valores captados por el sensor "<< refMediana << " es "<< mediana;
std::cout<<std::endl;
}
Si el if, era para ser mas exquisito y decirle si el vector era par que coja uno u otro, sabes?
Y el error era rarisimo, pero finalmente en la funcion de comparaValor que es una simple booleana para comparar el mayor y el menor
bool comparaValores(const Sensor &s1,const Sensor &s2)
{
if(s1.lectura<s2.lectura)
return true;
else
return false;
}
Añadiendo ahi el const, ya no me aparecio, y finalmente ya lo resolvi y quedo asi:
oid Mediana(std::vector<Sensor> &v)
{
std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
std::cout <<"~~~~~~~~~~~~~~~ MOSTRAR LA MEDIANA DE LOS VALORES DE UN SENSOR ~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
std::string refMediana;
std::cout <<"\t Introduzca la cadena de referencia del sensor que desee: ";
std::cin>> refMediana;
std::cout<<std::endl;
std::vector<Sensor> miVector;
for(auto s:v)
if(refMediana==s.referencia)
miVector.push_back(s);
//std::cout << "\t \t " << s.getLectura()<< std::endl << std::endl;
std::sort(miVector.begin(),miVector.end(),comparaValores);
auto mediana = miVector[miVector.size()/2];
std::cout <<"\t La mediana de los valores captados por el sensor "<< refMediana << " es "<< mediana.lectura;
std::cout<<std::endl;}