0

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

谢谢

4

4 回答 4

2

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

map[key] = value;
于 2012-10-30T15:06:01.420 回答
2

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

mapped_type& operator[](key_type const& k);
于 2012-10-30T15:07:07.123 回答
1

来自Boost 文档

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

效果:
如果容器还没有包含键等效于 k 的元素,则插入值 std::pair(k, mapped_type())

返回:
对 x.second 的引用,其中 x 是容器中已经存在的元素,或者是新插入的元素,其键等效于 k

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

注意: 可以使迭代器无效,但前提是插入导致负载因子大于或等于最大负载因子。

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

于 2012-10-30T15:11:59.947 回答
0

访问器操作符[]总是返回一个引用。如果地图元素不存在,则将创建它。因此,为避免重复搜索,以下模式很有用:

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

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

// use "value" rather than repeated "m[key]"
于 2012-10-30T15:21:38.167 回答