我有一张地图:map < int64_t, Item* > m_items
;
使用m_items[one_id]
时,我的应用程序崩溃了。
但如果我使用map<int64_t, Item*>::iterator iter = m_items.find(one_id)
,那就没关系。
如果我需要添加项目,我必须使用:m_items.insert(make_pair(one_id, one_item));
为什么会这样?
答案 0 :(得分:2)
你知道你正在使用什么版本的gcc吗? 如果它是gcc 4.5或更早版本gcc中的这个错误导致Boost的无序地图的[]运算符无法正常运行:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40145 也许你会看到类似的东西。
如果是gcc 4.6我不确定,但是C ++ 11 at()方法可供你使用,它有点慢,但它比find更快。 http://www.cplusplus.com/reference/map/map/at/