Ordinamento di date e ora in un vettore di struct

di il
1 risposte

Ordinamento di date e ora in un vettore di struct

Buongiorno, devo scrivere un programma che analizza i dati di utenze di gas.
I dati sono presi da un file csv e inseriti in un vettore di struct

struct LetturaDaContatore {
    int year;
    int month;
    int day;
    int hh;
    int mm;
    int ss;
    int consumption;
    string custumer;
};
Una volta inseriti avrei bisogno di mettere i dati in ordine cronologico tuttavia non riesco a capire come fare a ordinarli. Ho implementato questa funzione per gli anni ma non riesco ad andare oltre:

vector<LetturaDaContatore> InsertionSort_YEAR(vector <LetturaDaContatore> data, int dim, bool ascending){
    LetturaDaContatore temp;
    int i, j;
    if(ascending != 0) ascending = 1;
    for(i = 1; i < dim; i++){
        temp = data[i];
        j = i - 1;
        while(j >= 0 && (data[j].year > temp.year) == ascending){
            data[j + 1] = data[j];
            j--;
        }
        data[j + 1] = temp;
    }
    return data;
}
Grazie a chiunque potrà darmi una mano!

1 Risposte

  • Re: Ordinamento di date e ora in un vettore di struct

    Ciao ho provato a seguire la tua soluzione utilizzando i vettori però:
    
    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;
    }
    
    void scambia (LetturaDaContatore* first,LetturaDaContatore* second){
        LetturaDaContatore* temp;
        temp = first;
        first = second;
        second = temp;
    }
    
    vector<LetturaDaContatore> ordina (vector <LetturaDaContatore> data){
        
        for (unsigned i=0;i<data.size()-1;i++){
            if (valuta(data[i]) > valuta(data[i+1])){
                scambia(&data[i],&data[i+1]);
            }
        }
        return data;
    };
    
    tuttavia l'output con tre record di prova è il seguente:

    Allegati:
    18704_0b96741e04b976e68893b5d1d9b2a8c7.png
    18704_0b96741e04b976e68893b5d1d9b2a8c7.png
Devi accedere o registrarti per scrivere nel forum
1 risposte