Мое приложение объединяет два экземпляра std::map
. Если дубликатов нет, слияние завершается без вмешательства. Однако, если обнаружен дубликат, тогда метод спрашивает, следует ли игнорировать или перезаписывать новое значение. (На этот запрос может отвечать таблица правил, окно сообщения пользователю или какая-то другая логика ... это всего лишь экземпляр класса, полученного из чистого виртуального класса, с помощью метода bool confirm() const
.)Изменение значения в std :: map с итератора
Если insert не удается, и они решают перезаписать существующую запись, у меня уже есть итератор, указывающий на правильный элемент для обновления. Могу ли я использовать этот итератор для непосредственного обновления значения, или мне нужно позвонить 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' вернет неизменяемую копию значения. Благодаря! –