繁体   English   中英

将unordered_map键值提升为0

[英]boost unordered_map key value of 0

我正在使用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>测试了插入是否有效

插入返回并且布尔值是true,表示它已成功插入。我正在创建本地到全局编号映射,因此我的键全都是0:N-1。 我知道N,因此应该可以如下循环(计数== 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映射,因为我们是跨平台的,并且我们的linux编译器当前不支持它。

编辑前 :很可能您的key_type hash <>专长相等比较被破坏了。

您没有显示它,但据我所知,只有这种不变的错误可以解释您描述的行为(在一个独立的最小示例中)。

编辑后:您应该创建一个独立的示例来为您显示错误,以便我们能够提出更好的诊断信息

找到了答案,这是因为sehe强迫我编写自包含的代码。 这显示出数组的分配不足,进一步的覆盖,超出了此覆盖范围的结尾导致了正常的内存混乱,这只是一个症状。

at不会将index作为参数。 它以键作为参数。 如果没有键“ 0”插入的项目,boost将引发异常,从而导致崩溃。

http://www.boost.org/doc/libs/1_48_0/doc/html/boost/unordered_map.html#id1601722-bb

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM