我正在使用C ++ 11中的unordered_map库,我对桶如何工作有点困惑。根据cplusplus网站上的文件,我很清楚它们不像我想的那样工作。
我预计我的对中的密钥会被散列到同一个桶中。例如:
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, string> map;
map.emplace("abc", "bca");
map.emplace("abc", "bac");
cout << map.bucket_size(map.bucket("abc")) << endl;
cout << map.bucket_count() << endl;
return 0;
}
我的期望是输出
2
1
但是,它是
1
2
我知道输出的内容比我的期望更加理想,并且尽可能少的链接是目标,但出于我的目的,我希望这种链接和碰撞发生,以便我可以执行我需要的计算为我的计划。我错过了实现这一目标的步骤吗?
答案 0 :(得分:0)
出现了一些问题 - 一个是你将两个相同的密钥放在一起。最终发生的事情是第二个安卓实际上失败了,因为对于任何地图数据结构,每个键只能获得一个值。如果你看,你会发现包含“abc”的桶的值为“bca”。
对于bucket_count,不能保证它是任何特定值,并且可能是实现定义的。例如,它可能是你的实现总是创建至少2个桶,如果它创建任何桶。在确定该项目被丢弃之前,它还可以在插入第二个项目时创建第二个桶。