Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 2

С чем-то вроде следующего фрагмента:

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));

Ответ 3

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

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);

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

Ответ 4

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