Я хотел бы вставить новые элементы в unordered_map
и обновить их значение, если они уже существуют, все за один шаг. Я делаю это с перегрузкой operator[]
, которая, по словам документации, возвращает ссылку на тип значения карты.
unordered_map<int, size_t> map;
int &element = map[-3];
element++;
Это не компилируется. Однако следующее выполняет и выполняет, как я ожидал (инициализирует значение 1 и увеличивает его, если оно существует):
unordered_map<int, size_t> map;
map[-3]++;
Следующее также компилируется, но не выполняет то, что я ожидаю (это то, что я написал изначально, что привело к ошибке):
unordered_map<int, size_t> map;
auto element = map[-3];
element++;
Компилятор, кажется, указывает, что значение map[-3]
является int
, а не int&
.
Я посмотрел на этот ответ: возвращаемое значение оператора карты [] (и метод "at")
Но в этом случае тип LHS должен быть значением. Как я могу получить [изменчивую] ссылку обратно?