Error: map/set iterators incompatible
-
Hi,
ich habe folgendes Problem und habe leider keine Ahnung wie ich den Fehler beheben soll:
ich lege eine liste von sets der größe numCellsPerVL an:
this->DD = new DisjoinedData(ltm->getSize()); DisjoinedData(uint numCellsPerVL):numCellsPerVL(numCellsPerVL), maxSize(numCellsPerVL/2){ this->candidates = new set<uint>[numCellsPerVL]; }
deklaration ist die folgt:
private: set<uint>* candidates;
bis hierhin wird auch noch nicht gemeckert,
aber wenn ich versuche auf die sets wie folgt zuzugreifen, bekomme ich den Fehler:Expression: map/set iterators incompatible
set_union(setUnion.begin(), setUnion.end(), (this->DD->getCandidates(start)).begin(), (this->DD->getCandidates(start)).end(), unionSet.begin());
hat irgendjemand eine Idee wie ich das problem beheben kann?
edit:
set<uint> getCandidates(uint cell){ return this->candidates[cell]; }
-
set<> und map<> speichern ihre Schlüssel schreibgeschützt, damit niemand (versehentlich) die Sortierung durcheinanderbringen kann, deshalb kannst du ihre Iteratoren auch nicht als Ziel für einen Algorithmus angeben.
Lösung: verwende einen Insert-Iterator als Ziel.
-
danke erstmal für die schnelle antwort.
hmm, das problem liegt aber nicht im zieliterator (damit meinst du doch "unionSet.begin()", oder?), sondern in diesen beiden zugriffen:(this->DD->getCandidates(start)).begin(), (this->DD->getCandidates(start)).end()
wenn ich stattdessen ein set
set<uint> pipapo;
deklariere und den aufruf wie folgt ausführe kommt keine fehlermeldung:
set_union(setUnion.begin(), setUnion.end(), pipapo.begin(), pipapo.end(), unionSet.begin());
edit:
habe trotzdem mal folgendes getestet (ich hoffe das ist was du meintest ):
set_union(setUnion.begin(), setUnion.end(), (this->DD->getCandidates(start)).begin(), (this->DD->getCandidates(start)).end(), inserter(unionSet,unionSet.begin()));
bekomme aber nach wie vor denselben error...
-
Hmm, da könnte es auch Probleme damit geben, daß getCandidates() eine temporäre Kopie deiner set zurückgibt. Dadurch erhältst du bei den beiden Aufrufen zwei unabhängige set<>s - und das dürfte spätestens zur Laufzeit krachen.
(ändert sich denn etwas am Problem, wenn du den Rückgabetyp der getCandidates() in
const set<uint>&
änderst=)
-
super, danke!
habe zwar bestimmt noch 10.000 weitere bugs im program, aber zumindest den wär ich schon mal los