2

我有一张地图: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));

为什么是这样?

4

1 回答 1

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/

于 2013-09-19T14:00:55.123 回答