boost :: unordered_map是否返回值的引用或副本

时间:2012-10-30 15:03:51

标签: c++ boost unordered-map

当使用boost unordered_map时,如果我执行map [key],返回的类型是对值V的引用还是值的副本?

由于

4 个答案:

答案 0 :(得分:2)

这是一个参考,否则这不起作用:

map[key] = value;

答案 1 :(得分:2)

根据documentation,它似乎是一个参考。

mapped_type& operator[](key_type const& k);

答案 2 :(得分:1)

来自Boost documentation

  

mapped_type&安培; operator [](key_type const& k);

     

<强>效果:
  如果容器尚未包含具有等于k的键的元素,则插入值std :: pair(k,mapped_type())

     

<强>返回:
  对x.second 的引用,其中x是容器中已有的元素,或者是新插入的元素,其键值等于k

     

<强>抛出:
  如果除了调用hasher之外的操作抛出异常,则该函数无效。

     

备注:   可以使迭代器无效,但仅当插入导致加载因子大于或等于最大加载因子时才会失效。

     

指针和对元素的引用永远不会失效。

答案 3 :(得分:0)

访问者运算符[]始终返回引用。如果map元素不存在,则将创建它。因此,为了避免重复搜索,以下模式很有用:

std::unordered_map<K, T> m = populate_me();

T & value = m[key];   // created if non-existent

// use "value" rather than repeated "m[key]"