Ändern Sie den Wert in std::map von iterator
Meine Anwendung führt zwei std::map
Instanzen. Wenn keine Duplikate vorhanden sind, wird der merge abgeschlossen, ohne intervention. Allerdings, wenn ein Duplikat gefunden wird, dann ist die Methode, die fragt, ob der neue Wert ignoriert werden sollen oder überschrieben werden. (Diese Abfrage kann beantwortet werden, indem eine Regel, Tabelle, Feld Nachricht an den Benutzer, oder eine andere Logik ... es ist nur eine Instanz von einer Klasse abgeleitet von einer rein virtuellen Klasse mit einem bool confirm() const
Methode.)
Wenn das einfügen schlägt fehl, und Sie entscheiden sich, überschreiben Sie den vorhandenen Eintrag, ich habe bereits ein iterator zeigt auf das richtige Element zu aktualisieren. Kann ich mit diesem iterator aktualisieren Sie den Wert direkt ein, oder muss ich anrufen operator[]
und nehmen den Treffer von einem anderen lookup?
//typedef std::map<Foo, Foo, Compare> Dictionary;
//Dictionary this_dictionary, other_dictionary;
for (Dictionary::const_iterator i = other_dictionary.begin();
i != other_dictionary.end();
++i) {
std::pair<Dictionary::iterator,bool> ret = this_dictionary.insert(*i);
if (!ret.second && confirmer.confirm()) {
//???
}
}
InformationsquelleAutor Dave Mateer | 2011-08-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
Dictionary::iterator
stattDictionary::const_iterator
in den return vom insert.pair<const Key, T>::second
zurückkehren würde, eine unveränderliche Kopie des Wertes. Danke!InformationsquelleAutor Dave S
Können Sie, aber müssen Sie mit iterator statt const_iterator.
Sie ändern Sie den Wert von
ret.first->second
.InformationsquelleAutor Irit Katriel