Zugriff auf const std::map



  • Hallo zusammen,

    ich habe ein kleines Problem beim Zugreifen auf die Elemente einer Matrix von double-Werten, die als geschachtelter Map-Container definiert ist:

    const std::map< uint, std::map< uint, double > > matrix;
    

    Da die Matrix const ist, kann ich nicht den Indexoperator, sondern nur die find()-Methode für den Zugriff verwenden. Allerdings weiß ich nicht wirklich, wie ich das anstellen soll. Ich habe es mit

    std::map< uint, std::map< uint, double > >::const_iterator::it = matrix.find( i );
    

    versucht, aber it ist dann nicht wirklich ein Zeiger auf die inneren map-Container vom Typ std::map< uint, double >, sondern bereits ein Element vom Typ std::pair< uint, double >. Ich würde allerdings gerne irgendwie auf den double Wert an der Stelle (i, j) der Matrix zugreifen.

    Wäre super, wenn mir jemand ein kurzes Beispiel posten könnte, wie man sowas bewerkstelligen kann. Ich habe schon alles ausprobiert, aber mir fliegen die Compilerfehler nur so um die Ohren 😞

    Vielen Dank im Voraus
    SweetNuthin



  • Hallo,
    habs mir mal in mein VS kopiert. Die nächste Zeile sieht dann bei mir so aus:

    std::map< uint, std::map< uint, double > >::const_iterator it2 = it->second.find(j);
    


  • templäd schrieb:

    habs mir mal in mein VS kopiert. Die nächste Zeile sieht dann bei mir so aus:

    std::map< uint, std::map< uint, double > >::const_iterator it2 = it->second.find(j);
    

    Danke für die schnelle Antwort, templäd! Direkt so hat es bei mir nicht funktioniert, aber du hast mich auf die richtige Idee gebracht:

    std::map< uint, std::map< uint, double > >::const_iterator it = matrix.find( i );
    std::map< uint, double >::const_iterator it2 = it->second.find( j );
    os << it2->second;
    

    Vielen Dank nochmals...
    SweetNuthin



  • Weiß jemand, wieso der Operator '[]' in C++ unbedingt ein nicht-statisches Klassenmitglied sein muss? Ich hätte nämlich spontan die Idee gehabt, den fehlenden konstanten []-Operator nachzuliefern, aber der Code klappt aufgrund dieser Einschränkung nicht. Fast jeder andere Operator funktioniert -- aber irgendwie sieht es affig aus zu schreiben 'map1 + abc', wenn man eigentlich meint 'map1[abc]'. 😉



  • Konrad Rudolph schrieb:

    Weiß jemand, wieso der Operator '[]' in C++ unbedingt ein nicht-statisches Klassenmitglied sein muss?

    Weil der Operator this-abhängig ist.



  • Michael E. schrieb:

    Konrad Rudolph schrieb:

    Weiß jemand, wieso der Operator '[]' in C++ unbedingt ein nicht-statisches Klassenmitglied sein muss?

    Weil der Operator this-abhängig ist.

    Sind das die anderen Operatoren nicht auch?


Anmelden zum Antworten