获取对运算符 [] 返回值unordered_map引用
Acquiring a reference to unordered_map operator[] return value
我想在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&
。
我看了这个答案:map运算符[](和"at"方法)的返回值
但在这种情况下,LHS 类型被强制为值。如何取回 [可变] 引用?
您的地图的价值是什么? int 还是 size_t ?
unordered_map<int, size_t> map;
size_t &element = map[-3]; // now it works
element++;
auto
类型推断完成时丢弃引用,如果要修改 map 中的值,则需要使用 decltype(auto)
或 auto&
(更具可读性)
unordered_map<int, size_t> map;
decltype(auto) element = map[-3];
element++; // now it works
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- unordered map -在c++ std::unordered_map中预分配桶