Struttura dinamica con oggetti: Set di struct

di il
3 risposte

Struttura dinamica con oggetti: Set di struct

Ciao ha tutti.
vorrei creare una struttura dinamica a cui possa accedere tramite un unica chiave e in modo diretto senza fare iteratore insomma, per fare ciò avevo pensato al set.

sul un libro ho trovato che si definisce in questo modo:
typedef std:: set <int, std::less<int> > nomeSet;

ora il mio problema è che voglio creare una struttura di un tipo struct del genere

struct terminale{
	Ptr <Node> ptrN;
	Ptr <LteNetDevice> ptrLND;
	Ptr <UeNetDevice> ptrUND;
	double tempoVita;
	Mac48Address macUe;
};
ho provato a sostituire ad int , il nome terminale (ho usato anche typedef prima di struct e un nome dopo ; ..) ma non funziona....mi 2 o 3 errori tipo
argumen 1 not valid
terminale is not declared for this scope


qualcuno mi potrebbe dare un consiglio su come fare?
grazie mille

3 Risposte

  • Re: Struttura dinamica con oggetti: Set di struct

    Devi definire l'operatore less than (ovvero l'operatore <) per la struttura poi puoi usare il set così
    
    struct terminale{
       Ptr <Node> ptrN;
       Ptr <LteNetDevice> ptrLND;
       Ptr <UeNetDevice> ptrUND;
       double tempoVita;
       Mac48Address macUe;
       bool operator <(const terminale & rhs)
      {
          return tempoVita < rhs.tempoVita;
      }
    };
    ....
    
    std::set<terminale> ilMioSet;
    
    l'operatore < io l'ho definito sul tempoVita ma devi essere tu a fare l'ordinamento secondo il tuo raggionamento.
  • Re: Struttura dinamica con oggetti: Set di struct

    Ti ringrazio Skynet quindi se volessi ordinarli per MacAddress dovrei ridefinire l'operatore bool in modo tale che nel set vengano inseriti in modo ordinato tramite il MacAddress.
    ma poi la chiave di ricerca diventa il MacAddress?
  • Re: Struttura dinamica con oggetti: Set di struct

    Per il find devi fare un altra cosa. Creare un constructor che accetta un mac address come parametro, perche il find di set funziona sull'oggetto con cui il set é costruito non con campi di struct. Insomma devi fare una cosa del genere.
    http://stackoverflow.com/questions/5865303/making-find-work-with-a-set-of-structs

    Un altra cosa che puoi fare é quella si usare una std::map o meglio ancora un std::unordered_map e puoi usare come chiave il mac e come value lo struct. Qui il find funziona sul key quindi sul mac.
Devi accedere o registrarti per scrivere nel forum
3 risposte