map: operator== nicht definiert/gefunden im Zusammenhang mit map::end



  • Hallo, hier mal das kurze Problembeispiel:

    if(prelink.find(prelink_place) == std::map<place*,unsigned int>::end)
    

    er meckert wie folgt:

    no match for 'operator==' in '(((std::map<place*, unsigned int, std::less<place*>, std::allocator<std::pair<place* const, unsigned int> > >)((transition)this)) + 24u)->std::map<_Key, _Tp, _Compare, _Alloc>::find [with _Key = place*, _Tp = unsigned int, _Compare = std::less<place*>, _Alloc = std::allocator<std::pair<place* const, unsigned int> >](((place* const&)((place* const*)(&prelink_place)))) == std::map<_Key, _Tp, _Compare, _Alloc>::end [with _Key = place*, _Tp = unsigned int, _Compare = std::less<place*>, _Alloc = std::allocator<std::pair<place* const, unsigned int> >]'

    scheinbar passen die Typen nicht zusammen die hier verglichen werden, aber map::end ist doch der Wert den die find methode zurückgibt, wenn der gesuchte Wert nicht zu finden ist, so stehts zumindest in der c++ referenz.
    Der compiler hört auf zu meckern, wenn ich statt map::end einfach einen iterator hinschreibe, der auf das Ende der map zeigt.
    Wo liegt der Unterschied bzw. der Fehler hier? Fände es doof einen iterator nur für diesen Vergleich zu deklarieren.
    Danke für jede Hilfe 🙂



  • Nur als Anmerkung:
    prelink ist auch eine map des typs <place*,unsigned int>, daran liegts nicht 😉



  • std::map<place*,unsigned int>::end() // <-- Klammern
    


  • Baaah. Das muss natürlich

    prelink.end()
    

    sein.



  • AH 😃 Natürlich das geht ja auch^^ danke sehr 🙂


Anmelden zum Antworten