Schleife optimieren



  • Hallo,

    ich will eine Schleife optimieren. Ich habe folgende Datenstukturen (vereinfacht):

    class Segment {
       int ID;
       ...
       vector< vector<Node*> > externalGroups;
    }
    
    class Fragment {
       int segmentID:
       Range range; // struct Range { int startIndex, numIndices; }
    
    }
    
    map<int, vector<Fragment> >     mFragmentMap;
    

    Ich kriege als Input eine Liste von SegmentS. Durch die iteriere ich. In jedem Segment iteriere ich ueber alle externalGroups (Eine externalGroup ist eine Liste von Node*). Jede externalGroup hat eine ID und die steht in dem Node (alle Nodes einer externalGroup haben quasi die selbe ID). Mit dieser ID
    gehe ich in die map mFragmentMap. Und dann mache ich etwas mit allen Fragmenten, deren SegmentID gleich der aktuellen Segment ID (sprich das Segment, durch das ich gerade iteriere) ist.
    Insgesamt sieht es so aus (Pseudocode):

    foreach Segment sg in SGVector {
    
       for(vector< vector<Node*> >::Const_Iterator it = sg.externalGroups.begin();
           it != sg.externalGroups.end();++it) {
    
           const vector<Node*>& extGrp = *it;
           if(extGrp.size() > 0) {
               int externalID = extGrp[0]->getID();
    
               vector<Fragment> fragList = mFragmentMap[externalID].
               foreach frag in fragList
                    if(frag.segmentID == sg.ID)
                         // mach was
    
           }		   
        }
    }
    

    Einfach formuliert: Jedes Segment hat eine Liste von ExternalGroups und jede ExternalGroup setzt sich aus n Fragmenten zusammen (Fragment ist in etwa das selbe wie Segment).

    Die Schleife gefaellt mir nicht, da ich 3 Schleifen habe und noch ein find(). Wie koennte ich das verbessern?



  • Was auch immer der Sinn davon sein soll (denn er erschließt sich mir nicht).
    Wenn es notwendig ist, über alles zu iterieren, dann kannst du das nicht weg optimieren.
    Wo du ein find siehst, ist mir nicht klar, bei der Map auf jeden Fall nicht.

    Was ist dein Problem genau? Ist es zu langsam? Hast du es profiled?



  • Einfach formuliert: Jedes Segment hat eine Liste von ExternalGroups und jede ExternalGroup setzt sich aus n Fragmenten zusammen (Fragment ist in etwa das selbe wie Segment).

    Warum gibt es keine Klasse ExternalGroup, die (aus Nodes (?) und ) Fragmenten besteht? Dann hättest du direkten Zugriff auf die Fragmente einer ExternalGroup.


Anmelden zum Antworten