Ungewollt read-only structure erschaffen



  • Hallo,

    in meinem Programm kommen folgenden Zeilen Code vor:

    set< pair<set<int>, node*> >::iterator it = part_nodes[0]->subs.grouped_subs.begin();
    it->second = NULL;
    pair<set<int>, node*>* p = &(*it);
    

    Die erste Zeile ist offensichtlich nur mit längeren Erklärungen verständlich. Von daher hoffe ich, dass hier erst einmal genügt festzustellen, dass
    - der Compiler keine Fehlermeldung für sie ausgibt, die Initialisierung von "it" also (für den Compiler) durchführbar ist,
    - "node" irgendeine Klasse ist

    Für die zweite Zeile erhalte ich allerdings

    assignment of data-member ‘std::pair<std::set<int, std::less<int>, std::allocator<int> >, node*>::second’ in read-only structure

    und für die dritte

    invalid conversion from ‘const std::pair<std::set<int, std::less<int>, std::allocator<int> >, node*>’ to ‘std::pair<std::set<int, std::less<int>, std::allocator<int> >, node>*’

    Weiß jemand, was hier passiert? "it" ist doch ein Iterator auf ein

    set< pair<set<int>, node*> >
    

    Wo ist hier irgendetwas read-only / konstant?



  • Der Schlüssel ist konstant, und zwar generell bei assoziativen Containern, da sich beim Ändern des Schlüssels die Ordnung innerhalb der Datenstruktur ändern könnte. Dies könnte der Container nicht abfangen, würde dabei also inkonsistent.

    Da bei einem Set der Schlüssel gleichzeitig der Wert ist, ist dieser auch konstant.


Anmelden zum Antworten