首页 > 解决方案 > 获取对 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 类型被强制为一个值。如何获取 [可变] 引用?

标签: c++dictionarystlrvalue

解决方案


你的地图有什么价值?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

推荐阅读