boost无序映射键值为0
boost unordered_map key value of 0
我使用的是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
相关文章:
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- C++ 映射的键/值的用户自定义名称?
- 更改多重映射容器中所有元素的键值
- 使用无序映射在STL中存储键值对
- 当值是地址C 时,如何使用键使用映射值
- 键值映射中的部分查找,其中键本身是键值映射
- 为什么要对 map::find 应用不存在的键将返回一个C++中第一个值映射大小的迭代器
- 在映射中插入键值,其中映射的值是向量对
- 打印出映射键值,其中键是结构变量 c++
- 将浮点值映射到一对键
- 如何在映射中找到上一个和下一个键/值
- 为什么用Spirit解析一个空行会在映射中产生一个空的键值对
- C++使用没有值,只有键的映射的字典
- 如何命名同时充当其他集合容器的B+树键/值映射集合
- 排序值C++映射具有多个键值的数据结构
- 如何将键值对引用从一个映射复制到同一类型的另一个映射
- 如何创建以字符作为键值并将字符串数组作为映射值的映射 - 数组必须具有不同的长度
- 存储桶键值映射
- 将std::string就地标记为键值映射
- 数据映射:从"any"类到泛型键值映射(C++)