Могу ли я изменить значение карты STD, не найдя его сначала - PullRequest
0 голосов
/ 31 марта 2020

Это то, как в настоящее время я меняю значение std :: map

std::map<std::string, int> stdmapMasks;
stdmapMasks.insert(std::make_pair("VALUE", 1));
std::map<std::string, int>::iterator it = stdmapMasks.find('VALUE'); 
if (it != stdmapMasks.end())
    it->second = 42;

Могу ли я изменить значение напрямую без необходимости поиска элемента карты?

1 Ответ

1 голос
/ 31 марта 2020

C ++ имеет много способов взаимодействия со значениями карты без явного вызова map::find. operator[] позволяет получить доступ к значению, по умолчанию создавая его, если оно не существует. insert_or_assign из C ++ 17 предоставляет способ сделать то, что делает operator[], за исключением необходимости иметь конструктор по умолчанию. try_emplace в C ++ 17 будет создавать-конструировать значение, если ключ отсутствует, но ничего не делает, если там уже есть значение.

Но ни в одной версии C ++ нет такого метода, как "try_assign", где назначение не происходит, если ключ уже существует. Так что вам придется сначала явно найти его.

...