【问题标题】:Populating map in a different way以不同的方式填充地图
【发布时间】:2017-10-13 16:06:34
【问题描述】:

这是填充地图的现有代码。

typedef unordered_map<std::string, SomeSet> StringToSetMap;

StringToSetMap myMap;

std::string str ("hello");

SomeSet &mySet = myMap[str]; //Map populates here

“SomeSet”是一个类型定义的 unordered_set。

据我所知,地图只能以here 提到的方式填充

这是如何以这种方式填充地图的?

【问题讨论】:

  • 您链接到的问题的答案如何使这里发生的事情不清楚?

标签: c++ c++11 unordered-map


【解决方案1】:

See the docs 表示有问题的下标运算符。注意操作符的描述是它...

返回对映射到与 key 等效的键的值的引用, 如果这样的键不存在,则执行插入

另请注意:

返回值

如果没有带有键 key 的元素,则引用新元素的映射值 存在。否则引用现有元素的映射值 其 key 等价于 key。

"hello" 不是地图中的键,因此它会被插入,并且会返回一个对闪亮的新 SomeSet 对象的引用。

(注意:键要么是移动构造的,要么是复制构造的,但无论哪种方式,值都是默认构造的。确保你有SomeSet的默认构造函数!)

【讨论】:

  • 值得指出的是,插入的元素将是默认构造的,因此只有当您的地图是具有默认构造函数的类型时才能使用下标运算符。
  • @scohe001 所以我也可以先填充 mySet,然后再执行 myMap[str] = mySet。对吗?
  • @ontherocks 当然。 myMap[str] 返回对新 SomeSet 对象的引用,然后将其设置为等于某个值。相当于SomeSet &amp;thing = myMap[str]; thing = mySet;
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多