获取对unordered_map operator []返回值的引用

时间:2019-01-11 06:58:34

标签: c++ dictionary stl rvalue

我想一步步将新元素插入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&

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

但是在那种情况下,LHS类型被强制为一个值。如何获得[可变]参考?

1 个答案:

答案 0 :(得分:6)

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