将unordered_map键值提升为0

时间:2014-11-03 10:40:30

标签: c++ boost unordered-map

我使用的是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编译器目前不支持它。

3 个答案:

答案 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