我使用的是boost 1.56并且有一个unordered_map。当我按如下方式插入键值零时:
boost::unordered_map<int, int> map;
for(int i=0; i < size; i++)
{
int value = another_array[j];
map.insert(i, value);
}
使用时访问地图时出现崩溃 map.at(0);
我已经通过查看插件来测试插件的工作原理 std :: pairiterator,bool&gt;
插入返回并且bool为true,表示它已成功插入 我正在创建一个本地到全局编号映射,所以我的键都是0:N-1。我知道N所以应该能够循环(count == 0:N-1),如下所示:
for(int j=0; j < count; j++)
{
if(map.count(j))
printf("Value at index %d is %d\n", j, map.at(j));
}
但是k的计数为零。如果我不执行检查,我会收到越界错误。怎么会发生这种情况?如果我切换到使用1-N作为键,则没有这样的问题。
我确实知道,在这个例子中,地图有点矫枉过正,但我有我的理由。
请注意,我不能使用std :: unordered map,因为我们是跨平台的,我们的linux编译器目前不支持它。
答案 0 :(得分:1)
编辑前:很可能是您的哈希&lt;&gt;专精 或 key_type
的相等比较已被破坏。
你没有表现出来,但据我所知,只有这种不变的错误才能解释你描述的行为(在一个自包含的最小例子中)。
编辑后:您应该创建一个自包含的示例,为您显示错误,以便我们能够提供更好的诊断
答案 1 :(得分:0)
答案发现感谢sehe强迫我编写自包含的代码。这显示了一个阵列进一步分配不足,覆盖超过这个结果导致正常的内存wierdness这只是一个症状。
答案 2 :(得分:0)
at doesn不将索引作为参数。它需要一个键作为参数。如果没有用键&#34; 0&#34;插入项目,则boost将抛出异常而导致崩溃。
http://www.boost.org/doc/libs/1_48_0/doc/html/boost/unordered_map.html#id1601722-bb