boost无序映射键值为0

boost unordered_map key value of 0

本文关键字:键值 映射 无序 boost      更新时间:2023-10-16

我使用的是boost 1.56,并且有一个无序映射。当我插入一个键值为零时,如下所示:

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::pai迭代器,bool>

insert返回并且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 %dn", j, map.at(j)); 
}

但是k的计数为零。如果我不执行检查,就会出现越界错误。这怎么会发生?如果我切换到使用1-N作为键,就没有这样的问题。

顺便说一句,我确实意识到在这个例子中,地图有点过头了,但我有自己的理由。

注意,我不能使用std::无序映射,因为我们是跨平台的,我们的linux编译器目前不支持它

编辑前:很可能是您的hash<>CCD_ 1的专业化相等性比较被破坏。

你没有展示它,但据我所知,只有这种不变的破坏错误才能解释你描述的行为(在一个自包含的最小例子中)。

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

由于sehe迫使我编写自包含代码,所以找到了答案。这显示出数组分配不足,超过末尾的覆盖导致了正常的内存不足,这只是一个症状。

at不将索引作为参数。它将一个键作为参数。如果没有插入键为"0"的项,boost将抛出异常,导致崩溃。

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