私のアプリケーションは2つのstd::map
のインスタンスをマージします。重複がない場合、マージは介入なしで完了します。ただし、重複が検出された場合、メソッドは新しい値を無視するか上書きするかを尋ねます。 (このクエリは、ルールテーブル、ユーザへのメッセージボックス、またはその他のロジックによって応答される可能性があります。これは、bool confirm() const
メソッドを持つ純粋な仮想クラスから派生したクラスのインスタンスです)。イテレータからstd :: mapの値を変更します
挿入が失敗し、既存のエントリを上書きすることにした場合、更新する正しい項目を指すイテレータが既にあります。このイテレーターを使用して値を直接更新することはできますか、operator[]
に電話してもう一度検索する必要がありますか?
// 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()) {
// ???
}
}
もちろん!何らかの理由で 'pair :: second'が値の変更不可能なコピーを返すと思っていました。ありがとう! –