c++ - 获取对 unordered_map operator[] 返回值的引用
问题描述
我想在 an 中插入新元素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 operator[] 的返回值(和“at”方法)
但在这种情况下,LHS 类型被强制为一个值。如何获取 [可变] 引用?
解决方案
你的地图有什么价值?int 还是 size_t ?
unordered_map<int, size_t> map;
size_t &element = map[-3]; // now it works
element++;
auto
类型推导完成时丢弃引用,如果要修改 map 中的值,则需要使用decltype(auto)
or (更具可读性)auto&
unordered_map<int, size_t> map;
decltype(auto) element = map[-3];
element++; // now it works
推荐阅读
- c++ - C++ Cstring 拆分
- sql - Amazon Redshift - 横向列别名参考
- php - {{ $data or 'Default' }} 在 laravel 刀片中不起作用
- javascript - 调整表格大小时如何通过在字符串中间放置省略号来截断字符串
- anaconda - 递归“Anaconda-Navigator”想访问您在 mac OS Catalina 上的文件夹
- flutter - 按下按钮时颤动更改文本
- android - 如何让我的班级接收不同的数据模式 kotlin android?
- assembly - 在装配中更改中断时...?
- json - 创建角度应用程序时出错
- python - 将分箱值转换为分类值