获取对 unordered_map operator[] return 值的引用

Acquiring a reference to unordered_map operator[] return value

我想在 unordered_map 中插入新元素并更新它们的值(如果它们已经存在),所有这些都一步完成。我正在使用 operator[] 重载执行此操作,文档说 returns 对地图值类型的引用。

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&

我看了这个答案:return value of map operator[] (and "at" method)

但在那种情况下,LHS 类型被强制为一个值。我如何取回 [mutable] 引用?

你的地图价值多少?整数或 size_t ?

    unordered_map<int, size_t> map;
    size_t &element = map[-3]; // now it works
    element++;

auto 在类型推导完成时丢弃引用,如果要修改 map[=15 中的值,则需要使用 decltype(auto)auto& (更具可读性) =]

   unordered_map<int, size_t> map;
   decltype(auto) element = map[-3];
   element++; // now it works