Auserhalb der Klasse durch eine verschachtelte multimap iterieren



  • Ich müsste wie im topic erwähnt durch eine verschachtelte multimap iterieren. Was ich bisher habe:

    typedef std::multimap< int, UnicodeString > tmDatas;
    typedef std::multimap< int, tmDatas > tmKeys;
    class TMap
    {
    public:
    	__fastcall TMap();
    	__property UnicodeString Key [int idxOuter ][int idxInner ] = { read=GetKey };
        void __fastcall AddField(int Key, int Record, UnicodeString sData);
    private:
    	UnicodeString __fastcall GetKey(int idxOuter, int idxInner);
    	tmKeys mpEntries;
    };
    
    __fastcall TMap::TMap()
    {
    	AddField(1,1,"test11");
    	AddField(2,2,"test22");
    	AddField(2,3,"test23");
    	AddField(2,4,"test24");
    	AddField(3,1,"test31");
    }
    UnicodeString __fastcall TMap::GetKey(int idxOuter, int idxInner)
    {
    	tmKeys::iterator itlow = mpEntries.lower_bound(idxOuter);
    	tmKeys::iterator itup = mpEntries.upper_bound(idxOuter);
    	tmKeys::iterator it;
    
    	tmDatas::iterator InnerIt;
    	for (it=itlow; it!=itup; ++it){
    		tmDatas &innerMap = it->second;
    		for (InnerIt = innerMap.begin(); InnerIt!=innerMap.end(); ++InnerIt){
    			if (InnerIt->first==idxInner) {
    				return InnerIt->second;
    			}
    		}
    
    	}
        return "";
    }
    

    Ich müsste jetzt irgendwie von außerhalb durch alle inneren Elemente iterieren wobei das äußere Element konstant bleibt

    Hier mal etwas Pseudocode wie ich es mir vorstellen könnte, habe aber keine Ahnung wie ich das in der Klasse realisiere. Ich bin auch für andere Vorschläge offen. Richtig schön wäre es wenn ich in der Klasse mehrere Iteratoren hätte so das ich zwischendurch andere Sachen erledigen könnte.

    void __fastcall TAndereKlasse::Iteriere()
    {
    	AnsiString s;
    	Map->SetIterator[2].begin();  //Äuseres Element 2 wählen  und auf das 1. innere Element stellen
    	while(!Map->End){
    		s=Map->GetData(); // Daten holen
    		//.. Other stuff
    		Map->GetNextElement();
    	}
    
    }
    


  • __property

    Das ist aber kein ISO C++.



  • Ich weiß, ich dachte weil es ja um multimaps geht wäre das ok. Vieleicht erklärt sich ja ein mod bereit die Frage nach VCL zu verschieben 🙂



  • Du scheinst das Iteratorkonzept nicht verstanden zu haben. Bei dir wird in Map intern „iteriert“. Ein Iterator ist aber etwas, mit dem man ohne Map direkt zu benutzen iterieren und die Werte betrachten kann. Du musst also das begin/end Paar der gewünschten inneren Map ausliefern und benutzen.


Log in to reply