Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35

    [c++] Ordinamento senza array

    Sottopongo a voi menti esperte un problema che mi si è presentato per ordinare i record di un file.
    In pratica ho dei record che contengono i dati di iscritti ad una biblioteca, sono salvati su di un file binario chiamato "Tessere", ma non sono in un array, sono scritti nell'ordine di inserimento.
    Ora però mi si è presentato il problema di ordinare questi record per cognome, immagino che fare tutto su file sia impossibile, o quantomeno difficile.
    Come posso agire? Non so a priori il numero dei record, qual'è quindi il metodo più giusto? Implementare ad esempio una lista e applicare uno degli algoritmi di ordinamento (p. e. merge sort) e poi riversare tutto di nuovo su file?

    Vi ringrazio anticipatamente per il vostro contributo.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Direi decisamente di si. Caricarli in una qualche struttura e ordinali.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Io leggerei dal file un record alla volta e poi lo inserirei in una lista. Mi sembra il modo più semplice...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35
    Scusate il disturbo, ma ci ho provato e trovo un po difficile implementare una lista astratta che raccolga tutti i record.
    Non ci sarebbe un modo per ordinare nel file i record mentre gli inserisco?
    sto impazzendo... Oppure potreste farmi un esempio di come andrebbe implementata la lista...
    Grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Una una semplice lista linkata:

    codice:
    class Node
    {
        private:
        void* _payload;
        Node* next;
    
        public:
        //Getter e Setter per i due valori
    }
    http://it.wikipedia.org/wiki/Lista_concatenata
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  6. #6
    Beh già che ci siamo usiamo i template, no?
    codice:
    template <typename type> class Node {
    
       private:
          type *payload;
          Node *next;
    
       public:
          //Getter e setter
    
    };

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da menphisx
    Beh già che ci siamo usiamo i template, no?
    Infatti, la magia dei puntatori void lasciamola al C :°D

    btw, No_Rules esiste già il container list nella STL, quindi puoi anche evitare di perdere tempo a reimplementare tutto.
    every day above ground is a good one

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35
    Si lo so ma nella mia lista ci deve essere un oggetto di tipo tessera e devo ordinare gli elementi della lista in base al cognome che è un attributo della tessera...un po contorta come cosa, anche perché questi oggetti devo leggerli da file, ci sto ancora provando...

    Cmq tante grazie per i vostri suggerimenti...

  9. #9
    Ma l'oggetto tessera ha grandezza fissa?
    Se sì leggi (grandezza file / grandezza oggetto tessera) tessera oggetti, e li inserisci uno per uno in una lista, tipo:
    codice:
    Node<Tessera> lista;
    OPPURE, li leggi una alla volta e li aggiungi uno alla volta alla lista:
    codice:
    Node<Tessera> *lista = newNode(NULL);
    
    file = apri_file();
    
    tessera = leggi_tessera(file);
    lista->setContent(tessera);
    
    Node<Tessera> *flower = lista->next;
    
    ciclo_principale:
    tessera = leggi_tessera(file);
    
    flower->setContent(tessera);
    flower->appendNode(flower);
    flower = flower->next;
    
    exit ciclo_principale
    
    ordina(lista);
    Così più o meno.............

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Originariamente inviato da YuYevon
    Infatti, la magia dei puntatori void lasciamola al C :°D
    ... sapete che non ci avevo mai neanche pensato? appena se ne va la mia ragazza ci provo subito!
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

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.