Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]sort di un array di classi

    ciao.
    Come posso fare il sort nella programmazione generica , con i function object di un insieme di oggetti di classe CClasse1 per la variabile membro CClasse.campoDaSortare?
    ad es questa è la classe CClasse1:

    class CClasse1
    {
    double campoDaSortare;
    int CampoA;
    int CampoB;
    int CampoC;
    };

    vector<CClasse1*> vect;

    CClasse1* pobj = new CClasse1 ();
    pobj->campoDaSortare = 99 ;
    pobj->CampoA = 22;
    pobj->CampoB = 33;

    vect.push_back(pobj);

    pobj = new CClasse1 ();
    pobj->campoDaSortare = 1 ;
    pobj->CampoA = 11;
    pobj->CampoB = 55;

    vect.push_back(obj);

    all inizio
    99 22 33
    1 11 55

    vorrei dopo il sort
    1 11 55
    99 22 33

    grazie.

  2. #2
    Utente di HTML.it L'avatar di Mad_al
    Registrato dal
    Jun 2009
    Messaggi
    125
    relativamente a questo caso, basta fare un passaggio diretto tramite variabile temporanea di appoggio e cquindi scambiare i 2 oggetti.

    nel caso generico, allora dipende in base a cosa devi ordinarli... devi scegliere uni dei campi.

    se si tratta di "CampoDaSortare" allora basta fare 2 cicli for annidati con due indici diversi i e j, (n.b. il secondo for deve partire da j=i+1)

    e mettere una condizione di if che controlli il "CampoDaSortare"... e a seconda della condizione ligica, far partire lo scabio con una variabile temporanea di appoggio per l'oggetto del vettore.

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    O basta usare la seconda versione di sort:
    http://www.cplusplus.com/reference/algorithm/sort/

    Ad esempio:
    codice:
    inline bool cmp(const CClasse1* a, const CClasse1* b) {
    
       if (a == 0 || b==0) {
           throw std::runtime_error("null pointer");
       }
    
       return ( a->campoDaSortare < b->campoDaSortare );
       
    }
    
    ...
    try {
       sort (vect.begin(),vect.end(),cmp);
    } catch (const std::exception& e) {
       cout << e.what() << endl;
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.