Ciao a tutti devo ordinare cronologicamente (considerando data e ora) una grande quantità di dati acquisita da un file .csv e già elaborata ed inserita in un vector<struct>:
struct LetturaDaContatore {
int year;
int month;
int day;
int hh;
int mm;
int ss;
int consumption;
string custumer;
};
Con alcuni suggerimenti e aiuti sono arrivato a mettere insieme questo algoritmo che funziona ma una volta dato il file con tutti i dati in input risulta lento e impossibile da elaborare totalmente...
long int valuta (LetturaDaContatore x)
{
return (x.ss)+(x.mm)*60+(x.hh)*3600+(x.day)*3600*24+(x.month)*3600*24*31+(x.year)*3600*24*365;
}
vector<LetturaDaContatore> ordina (vector<LetturaDaContatore> data){
unsigned i, j;
vector<LetturaDaContatore> sortedData;
long int current=0;
LetturaDaContatore temp;
for(i = 0; i<data.size(); i++){
bool inserita=false;
for (int k=0; k<sortedData.size(); k++){
if (valuta(data[i]) != valuta(sortedData[k]))
inserita=false;
else {
inserita=true;
break;
}
}
if (inserita==false){
current = valuta(data[i]);
temp = data[i];
for(j = 0; j<data.size();j++){
if (valuta(data[j]) < current){
bool trovata = false;
for (int k=0; k<sortedData.size(); k++){
if (valuta(data[j]) != valuta(sortedData[k]))
trovata=false;
else {
trovata=true;
break;
}
}
if (trovata == false){
current= valuta(data[j]);
temp= data[j];
}
}
}
sortedData.push_back(temp);
}
}
return sortedData;
}
qualcuno riesce a suggerirmi un algoritmo più "intelligente". Si tratta di un file csv di 1597284 righe.