C++ STL multimap emplace

zhengkai2001 2014-09-11 12:08:44
第一个问题
std::multimap<std::string,int> mymultimap;
//请问以下两行代码有什么区别(任何区别)
mymultimap.insert (std::pair<std::string,int>("apple",100) );
mymultimap.emplace("apple",100);


第二个问题
multimap<Point, Road> roads;
Point firstPoint(points[0]);
Point lastPoint(points[pointAmount - 1]);
roads.emplace(pair<Point, Road>(firstPoint, currentRoad));
roads.emplace(lastPoint, currentRoad); //在这一行的“.”操作符处出错

错误提示为“error C2780: “std::pair<_Ty1,_Ty2> std::_Tree<_Traits>::emplace(_Valty &&)”: 应输入 1 个参数,却提供了 2 个”
请问错在哪里?
...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengkai2001 2014-09-11
  • 打赏
  • 举报
回复
明白了,问题二好像是由于VS 2012还不支持C++ 11造成的= = 问题一仍然有效,继续
snake_xiongyang 2014-09-11
  • 打赏
  • 举报
回复
emplace 是对应 move 语义的 看一下C++11 的wiki你就会明白了
ri_aje 2014-09-11
  • 打赏
  • 举报
回复
insert 会复制 pair,emplace 用你提供的参数构造一个 pair 直接放在容器里,省一步复制。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧