Problem mit Iterator-const correctness
-
Hallo,
ich habe einen map-Container als Member, in dem ich nach einem best. gemappten Wert suche. Das problem besteht darin, dass alle map-Funktionen mir einen const_iterator zurückgeben, ich aber einen non-const-qualified-Iterator zum späteren Entfernen des Elements brauche. Dieses Verhalten kann ich nicht nachvollziehen. Hier der Code (alles passiert in einer Klasse):std::map<std::string, BBox>::iterator BBit; for (BBit = PIIs_in_XML.begin(); BBit != PIIs_in_XML.end(); ++BBit) //[...]Die Membervariable ist so deklariert bzw. initialisiert:
std::map<std::string, BBox> PIIs_in_XML; //[...] //ctor: XMLParser parser (confINI->at("XMLfileLocation")); PIIs_in_XML = parser.get_PII_files();Der Compiler sagt dann
error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::_Tree_const_iterator<_Mytree>' akzeptiert (oder keine geeignete Konvertierung möglich)
Ich dachte die map-Methoden liefern konstante Iteratoren nur, wenn das Objekt konstant ist - und das ist es in meinem Fall bestimmt nicht. Danke für die Antworten.
-
Ist die Methode, in der dieser Code steht,
[Rewind] schrieb:
std::map<std::string, BBox>::iterator BBit; for (BBit = PIIs_in_XML.begin(); BBit != PIIs_in_XML.end(); ++BBit) //[...]const ??
-
Antwort: facepalm.
-
> zum späteren Entfernen des Elements
braucht man ab C++11 auch nur noch einen const_iterator. erase ist natürlich weiterhin nicht const-qualifiziert.