std::map的[]操作符和insert的区别

sadnews 2010-07-01 07:32:02
#include <map>

//...
typedef std::map<void*, HANDLE> chunk_heap_table_t;

//...
void* pChunk;

//...
chunk_heap_table[pChunk] = hHeap; //句子1
chunk_heap_table.insert(chunk_heap_table_t::value_type(pChunk, hHeap)); //句子2

DEBUG:
[数据为假设]
pChunk: 0x0000001
hHeap:0x00ab000002
结果:
用句子1:chunk_heap_table中看到的值为0x0000001,0x00ab000002 //期待的结果
用句子2:chunk_heap_table中看到的值为0x0000001,0x0000000000 //意外

可以看到值是有差别的,句子1的结果是期待的结果。
根据这个帖子http://blog.sina.com.cn/s/blog_54cae6d70100gem2.html中的说法,句子2的效率比句子1高(绿色字体部分),但是句子2的结果不对,不知道为什么,哪位高人指点一下?
...全文
136 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CoffeeCN 2010-07-01
  • 打赏
  • 举报
回复
[]要求有默认构造函数
insert没有也可以
pengzhixi 2010-07-01
  • 打赏
  • 举报
回复
[]是一个查找如果有就不会添加,如果没有那么就调用insert
老邓 2010-07-01
  • 打赏
  • 举报
回复
chunk_heap_table[pChunk] = hHeap; //句子1
我喜欢句子1的用法。

chunk_heap_table.insert(chunk_heap_table_t::value_type(pChunk, hHeap)); //句子2

红色部分是错误的,应该改用:std::make_pair(pChunk, hHeap)来插入
healer_kx 2010-07-01
  • 打赏
  • 举报
回复
稍有区别,

map[key]调用的返回结果是value,如果key不存在,会返回value的默认值。

64,654

社区成员

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

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