Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11

    C++ usare stl::map e funzioni ad esso collegate

    Scusate, se ancora una volta rompo le scatole...
    ma perchè il codice che scrivo io non è corretto, cerco di farmi capire.. Sono riuscito soprattutto grazie all'aiuto di Shodan a scriver la struttura map come nel codice sopra riportato.. ora non faccio altro che:
    Settare una chiave di ricerca...e definire un'iteratore alla struttura...
    codice:
    map< vector<int>,DataMsg,MyArrayCompare <vector<int> >>::iterator elem;
    vector <int>key(3);
        
        key[0]=packmsg->getPrevious(0);
        key[1]=packmsg->getPrevious(1);
        key[2]=packmsg->getPrevious(2);
    ora cerco un'elemento all'interno della struttura....almeno così ho visto che si fa, dagli esempi riportati suu un manulae c++

    codice:
    elem = mp.find(key);
    e incredibile ma vero mi spara fuori 200mila errori, insomma nn compila...
    Ma cosa ho, la sfiga addosso oltre ad esser un'imbranato a programmare...
    Perodonate questo sfogo ma vado a picco.

    Giuseppe

  2. #12
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Attento alla dichiarazione:
    codice:
    map< vector<int>,DataMsg,MyArrayCompare <vector<int> >>::iterator elem;
    gli attuali compilatori (col prossimo standard la cosa dovrebbe risolversi) interpretano le due angolari rosse come operatore >> non come dichiarazione di template.
    Basta separarle da uno spazio e risolvi il problema.

    codice:
    map< vector<int>,DataMsg,MyArrayCompare <vector<int> > >::iterator elem;
    Ti consiglio comunque di fare un typedef della dichiarazione:
    1) per evitare errori di sintassi
    2) per semplificarti la vita.

    codice:
    // Questo va messo prima della dichiarazione della mappa globale.
    typedef  map< vector<int>,DataMsg,MyArrayCompare <vector<int> > > MyMap;
    MyMap mp; // mappa globale.
    // in seguito, se serve
    MyMap::iterator elem
    // etc.
    Ultima cosa.
    Nel functor ho messo
    codice:
    std::size_t maxComparingSize = std::min(a.size(),b.size());
    in caso serva ciclare tra gli elementi del vector (che può non essere vincolato a soli 3 elementi)
    e non oltrepassare i limiti.
    Se sai già che la locazione è valida e non ti serve un ciclo for, puoi anche ometterla.
    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.

  3. #13

    C++ usare stl::map - possibile errore

    Ciao Shodan,
    il problema che ti ho riportato, non era risolvibile ponendo uno spazio tra i ">>", ho provato infatti a mettere uno spazio tra i due segni e il risultato non cambia...
    Per chiarezza voglio riportarti l'errore del compilatore:

    codice:
    eror C3848:espressione con tipo 'const MyArrayCompare<T> 
    deve perdere alcuni qualificatori const-volatile per poter chiamare 
    'bool MyArrayCompare<T>::operator()(const T&,const T&)'
    with
    [
       T=std::vector<int>
    ]
    ......
    Tu ci capisci qualcosa?
    Per esser più sicuro ho voluto far una prova, ho tolto nuovamente nella definizione di map il riferimento a MyArrayCompare e le cose sembrano funzionare...

    codice:
    typedef  map< vector<int>,DataMsg> MyMap;
    tengo a precisare che l'errore viene sollevato in corrispondenza della riga di "find" ossia:
    codice:
    elem = mp.find(key);

  4. #14
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    A me compila senza problemi con VC++ Express. Che compilatore usi?
    A prima vista sembra che non gradisca const T&, prova semplicemente con T (anche se meno efficiente)
    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.

  5. #15

    C++ Usare STL map, soluzione all'errore

    Dopo aver sbattuto la testa per un bel pò e grazie all'aiuto di gente che ne sa più di me..(il che non è difficile), siamo giunti alla soluzione del problema:
    Bisognava modificare la funzione "bool operator"... riporto qui di seguito il codice:

    codice:
    template <typename T>
    struct MyArrayCompare {
    	 bool operator()(const T& a,const T& b) const{
                 
    		return (a[2] < b[2]);
    	}
    };
    insomma bastava aggiungere il modificatore "const" alla firma del metodo.
    A volte odio la programmazione, basta un'errore se pur banale per andare a picco.

    Grazie1000
    Beppe.

  6. #16
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: C++ Usare STL map, soluzione all'errore

    Originariamente inviato da beppe66
    A volte odio la programmazione, basta un'errore se pur banale per andare a picco.
    E invece proprio questo è il bello della programmazione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #17
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: C++ Usare STL map, soluzione all'errore

    Originariamente inviato da beppe66
    insomma bastava aggiungere il modificatore "const" alla firma del metodo.
    A volte odio la programmazione, basta un'errore se pur banale per andare a picco.
    Il problema di fondo sono anche i compilatori che in presenza dello stesso codice hanno differenti comportamenti.
    Come già detto, a me quel codice compilava senza problemi. Il tuo compilatore invece si lamentava.
    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.

  8. #18

    C++ Usare STL map - ringraziamenti

    Cmq caro shodan voglio ringraziarti,
    senza di te non ce l'avrei mai fatta....

    Sei grande...
    Giuseppe

  9. #19
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Grazie, ma sono altri i grandi.
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.