是否涉及地图
回答
operator[]
在std::map< class Key, class Value
用于获取对应于特定键(实际上,它返回一个引用,但w/e)的值。在你的情况,你会使用这样的:
(码片1)
std::map<std::string,std::vector<std::string>> m;
<...>
std::string the_key_you_need("this is the key");
std::vector<std::string> value = m[the_key_you_need];
value.push_back(<...>)
这是不一样的:
(码片2)
std::map<std::string,std::vector<std::string>> m;
<...>
m[the_key_you_need].push_back(<...>);
因为在第一个中,您正在制作一个副本m[the_key_you_need]
命名为value
,并将新字符串复制到副本,这意味着它不会在m
中结束。第二个是正确的做法。
另外,m[<something>] = value.push_back(<something_else>)
将不起作用,因为vector::push_back()
返回void。如果你想要做这种方式,你将需要:
(码片3)
std::map<std::string,std::vector<std::string>> m;
<...>
std::string the_key_you_need("this is the key");
std::vector<std::string> value = m[the_key_you_need];
value.push_back(<...>)
m[the_key_you_need] = value;//here you are putting the copy back into the map
在这种情况下,代码段2和3确实是相当的(但这段代码2更好,因为它不会创建不必要的副本)。
说明它返回一个参考解释了很多。我问的原因是,我读到STL与副本一起工作,它总是返回一个副本,并使传递的对象的副本http://stackoverflow.com/questions/14074289/does-passing-stl-containers-make-a -复制。也许我误解了答案 – Rajeshwar
@Raje,我已经编辑了一些答案,以进一步澄清它。你可以检查map的运算符[]'的确是返回一个引用[here](http://en.cppreference.com/w/cpp/container/map/operator_at) – SingerOfTheFall
所以问题是在这种情况下它返回的是复制或参考? – Rajeshwar
- 1. CogroupBy是否只涉及一名工人?
- 2. QGraphicsItem :: mapFromItem()是否涉及转换?
- 3. @Autowired是否只涉及一个对象?
- 4. 返回本地是否也涉及创建返回临时?
- 5. C++地图错误的地图,可能涉及分配器
- 6. 射线追踪算法是否涉及图像的光栅化?
- 7. 意图涉及内部类
- 8. 涉及位置
- 9. 涉及DMV
- 10. Ç涉及管
- 11. 涉及组合
- 12. 涉及数据
- 13. ember.js containerview涉及
- 14. 涉及jQuery的
- 15. 涉及多个NIC时的IP地址
- 16. 如何确定是否加入2号将涉及regourping /携带或subracting 2号将涉及借款?
- 17. 是否有涉及事件处理的单独线程?
- 18. 当涉及到调用渲染方法时,ReactJS是否“聪明”?
- 19. 是否有显示ä就象Vim所涉及的可能?
- 20. REST服务类型是否涉及数据流?
- 21. 没有涉及服务器的XSS - 这是否危险?
- 22. 如何在涉及两个表时检查是否存在行?
- 23. “ApplicationServices”的正确名称是否涉及交叉关注“东西”?
- 24. .NET Core项目是否涉及跨平台的PCL?
- 25. 下面的php代码是否有涉及安全风险?
- 26. 是否有涉及PHP函数getimagesize()的任何安全保留?
- 27. 涉及同一列的多个索引是否有用?
- 28. 类似binaryWriter.Write((字节)67)是否涉及运行时间转换?
- 29. 是否有可能涉及使用L2S或EF主/子记录
- 30. SQL INSERT是否涉及任何读/写锁?
你的例子甚至不会编译。 –
s/pushback/push_back? – doctorlove
即使您忽略明显的拼写错误,这也没有多大意义 – nijansen