Newsgroup: it.comp.lang.c++
Titolo: Re: Scelta container

 tali parametri? Gradisco molto link e frammenti di codice.
Detta così la tua domanda non ha risposte!
Archiviare è troppo generico... nessun programma archivia e basta.
Oltretutto per archiviare non è detto che occorra un container.
Secondo me la necessità di un container è data dal fatto che avrai tuoi
algoritmi che ci lavorano sopra, no?
Che ci devi fare con queste classi a parte archiviarle?
Quali svolgerai con più frequenza operazioni? (inserimenti? cancellazioni?
sort? ricerche?).
Come accederai alla struttura? (accesso sequenziale? random?).
I container non sono tutti uguali e si scelgono in base alle loro
caratteristiche.
Per sapere quali caratteristiche si adattano meglio al tuo codice bisogna
aver idea di quello che si sta facendo.
Contando sul fatto che tu sai cosa vorresti fare, almeno dillo anche a noi
se vuoi una risposta.

 Spero di essere stato chiaro.
Meglio di prima.
Allora, ti posto un pò di codice dal quale secondo me potresti partire
(attento l'ho scritto di fretta e non è la soluzione ai tuoi problemi, nel
senso che non so se va bene e comunque dovrai aggiungere ancora tanto
codice).
Comunque già è in grado di leggere e scrivere classi su di una mappa in
memoria (che è il container STL che ho scelto).
Se vedi l'esempio e ti va bene allora puoi aggiungere tutto quello che vuoi.
ciao.
#include <iostream>
#include <string>
#include <map>
using namespace std;
class mia
{
        int _colore,_lato;
        double _rotazione;
        string _nome;
        public:
        mia() : _nome("NULL"),_lato(0),_colore(0),_rotazione(0.0) {}
        mia(string Nome,int Lato,int Colore, double Rotazione)
        : _nome(Nome),_lato(Lato),_colore(Colore),_rotazione(Rotazione) {}
        mia(const mia& M)
        : _nome(M._nome),_lato(M._lato),
        _colore(M._colore),_rotazione(M._rotazione) {}
        mia& operator=(const mia& M) {
                // Gestisce l'auto-assegnamento:
                if(this == &M) return *this;
                _nome=M._nome;_lato=M._lato;_colore=M._colore;
                _rotazione=M._rotazione;
                return *this;
        }
        friend ostream& operator<<(ostream& os, const mia& M)
        {
                return os << M._nome << " " << M._lato << " " << M._colore
                        << " " << M._rotazione;
        }
        friend istream& operator>>(istream& is, mia& M)
        {
                return is >> M._nome >> M._lato >> M._colore >>
M._rotazione;
        }
};
class mioContainer
{
        typedef map<string,mia> tMio;
        tMio m;
        public:
        mioContainer() {}
        void add(string Key,const mia& M) { m[Key]=M; }
        friend ostream& operator<<(ostream& os, const mioContainer& M)
        {
                tMio::const_iterator it;
                for (it=M.m.begin();it!=M.m.end();++it)
                        os << it->first << " " << it->second << endl;
                return os;
        }
        friend istream& operator>>(istream& is, mioContainer& M)
        {
                while (!is.eof())
                {
                        mia p;
                        string Key;
                        is >> Key >> p;
                        if (is.fail()) break;
                        M.add(Key,p);
                }
        }
};
int main(int argc, char* argv[])
{
        mioContainer M;
        M.add("cod01",mia("cubo1",10,2,0.5));
        M.add("cod02",mia("cubo2",12,5,-0.5));
        M.add("cod03",mia("cubo3",15,7,1.5));
        cout << "Lettura altri dati...\n";
        cin >> M;
        cout << "Ora riscrivo...\n";
        cout << M << "\nPremi INVIO.";
        string c;
        cin.clear();
        getline(cin,c);
        return 0;
}