Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C++] sort vettore

  1. #1

    [C++] sort vettore

    ......

    class Riga
    {
    public:
    char stringa[20];
    int dim;
    int id;
    .......

    };

    ........

    void main()
    {
    vector<Riga> righe(0);

    ......

    }

    Nulla di complesso, un vettore fatto di oggetti Riga (contenenti una stringa, un id intero univoco ed una dimensione intera)

    Fatta l'assegnazione disordinata dei vari oggetti del vettore, come faccio ad ordinare il vettore secondo l'id (crescente o decrescente) ?

    Mi hanno detto che posso usare sort.. ma come?

    Qualcuno è così gentile da scrivermi due righe di esempio?

    Grazie infinite!!

    Andrea
    .. tutti siamo utili, ma nessuno è indispensabile ..

  2. #2
    Utente di HTML.it L'avatar di Angioletto
    Registrato dal
    Jan 2004
    Messaggi
    1,246

    Re: [C++] sort vettore

    posso darti un consiglio: non programmo da un bel pò!

    dovresti crearti un puntatore alla classe riga, attraverso il quale poi puntare il campo id (se non ricordo male!!)

    poi fai un for su tutto il vettore, visitando il campo id di ogni oggetto, e da lì mettere in ordine..

    se trovo qualcosa te lo posto!
    Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)

  3. #3
    Grazie mille per avermi risposto.

    Nel frattempo ho trovato la soluzione e la posto per correttezza, in modo che tutti possano utilizzarla

    Dato il prog di prima, basta aggiungere una classe che fa la sort

    template<class Object, class Comparator>
    void mysort(vector<Object>& a, Comparator cmp) {
    int n = a.size();
    for(int i=0; i<n-1; i++)
    for(int j=n-1; j>i; j--)
    if(!cmp(a[j-1], a[j])) {
    Object tmp = a[j-1];
    a[j-1] = a[j];
    a[j] = tmp;
    }
    }

    e tante struct quanti sono i tipi di comparazioni da fare. Ad esempio se si vuole ordinare prima per id e dopo per dim si aggiunge:

    struct DIMComp {
    bool operator() (const Riga& a, const Riga& b) const {
    return a.dim < b.dim;
    }
    };

    struct IDComp {
    bool operator() (const Riga& a, const Riga& b) const {
    return a.id < b.id;
    }
    };

    A questo punto nel mai basta chiamare

    //......

    mysort(righe, IDComp);

    //.......

    mysort(righe, DIMComp);

    //......

    Semplice no??

    Grazie a tutti.

    Ciao ciao.
    .. tutti siamo utili, ma nessuno è indispensabile ..

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.