获取对 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
我想在 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