Probleme mit Iterator



  • Hallo,

    ich habe einen Index, der aus einer map besteht und einen indexIterator:

    template <class Key, class Position, class Less = less<Key> >
    class Index
    {
    map<Key, Postiton, less<Key> > indexMap;
    
    public:
    typedef map<Key, Position, less<Key> > iMap;
    typedef indexIterator<class Key, class Position, class Less = less<Key> > iterator;
    
    Index(iMap im) { indexMap = im; }
    
    iterator begin() { return indexMap.begin(); }
    iterator end() { return indexMap.end(); }
    iterator find(const Key& key) { return indexMap.find(key); }
    
    ...
    }
    
    template <class Key, class Position, class Less = less<Key> >
    class IndexIterator
    {
    map<Key, Position, less<Key> >::iterator mapIterator;
    
    public:
    IndexIterator(???);
    
    Postition& operator*()
    ...
    }
    

    Mein Problem ist der IndexIterator. Ich weiß nicht,
    - ob das generell überhaupt so geht, dass ich eine Instanzvariable map::iterator anleg.
    - wie ich den Konstruktor machen soll
    - ob ich in Index die Methoden begin(), end(), find(...) so machen darf.

    Kann mir da jemand weiterhelfen?

    Vielen Dank im Vorraus und mfg
    rodo



  • Hi,
    bin zwar nur blutiger Anfaenger, aber so wie ich Deine Index class versteh, macht sie ja eingentlich nix anderes, als ein kleines bisschen Schreibarbeit im Vergleich zur direkten Erzeugung der Iteratoren zu sparen; Du bist dann halt Typenunabhaengig, was die pair-Typen angeht.
    Soweit so gut, was ich nicht versteh, ist was der IndexIterator denn bezwecken soll. Hab im Moment keine Literatur zur Hand, aber ich glaube mich nicht an einen Iteratortyp namens IndexIterator erinnern zu koennen.
    Was soll der denn machen, bzw. zu was benutzt werden??

    SF



  • Hi,

    ich brauch den IndexIterator, weil ich z. B. den operator* überlagern muss.
    Der gibt normalerweise das pair<Key, Position> zurück, ich brauch aber Position.

    Ich hab jetzt aber ne Lösung:
    IndexIterator hat als Instanzvariable map<...>::iterator, der Kostruktor kriegt diesen map<...>::iterator und die Funktionen in Index schaun dann so aus:
    iterator begin() {return iterator(indexMap.begin()); }
    ...

    Man hätte den IndexIterator wohl auch von map<...>::iterator ableiten können, das hab ich aber auch nicht auf Anhieb hinbekommen...

    Mfg
    rodo



  • hi,

    wie willst denn die Position ermitteln, ueber den Key? Dann waer ja wieder

    return indexMap.find(key);
    

    angesagt, oder seh ich das falsch?

    MfG
    SF


Anmelden zum Antworten