Карта STL - вставляет или обновляет

У меня есть карта объектов, и я хочу обновить объект, отображенный на ключе, или создать новый объект и вставить в карту. Обновление сделано другой функцией, которая берет указатель на объект (пустое обновление (MyClass *obj))

Что лучший способ состоит в том, чтобы "вставить или обновить" элемент в карте?

18
задан CodeJunkie 7 May 2010 в 06:32
поделиться

4 ответа

Оператор []

21
ответ дан 30 November 2019 в 07:33
поделиться

что-то вроде:

map<int,MyClass*> mymap;
map<int,MyClass*>::iterator it;

MyClass* dummy = new MyClass();
mymap.insert(pair<int,MyClass*>(2,dummy));

it = mymap.find(2);
update(it.second);

здесь хорошая ссылка ссылка

1
ответ дан 30 November 2019 в 07:33
поделиться

Оператор [] уже делает то, что вы хотите. Подробнее см. в ссылке .

1
ответ дан 30 November 2019 в 07:33
поделиться

Примером следующего фрагмента:

std::map<Key, Value>::iterator i = amap.find(key);

if (i == amap.end())
    amap.insert(std::make_pair(key, CreateFunction()));
else
    UpdateFunction(&(i->second));

Если вы хотите измерить что-то, что может улучшить производительность, вы можете использовать .lower_bound () , чтобы найти, где находится запись, и использовать это как подсказку для вставьте в том случае, когда вам нужно вставить новый объект.

std::map<Key, Value>::iterator i = amap.lower_bound(key);

if (i == amap.end() || i->first != key)
    amap.insert(i, std::make_pair(key, CreateFunction()));
                                       // Might need to check and decrement i.
                                       // Only guaranteed to be amortized constant
                                       // time if insertion is immediately after
                                       // the hint position.
else
    UpdateFunction(&(i->second));
12
ответ дан 30 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: