unordered_map与桶冲突

时间:2017-11-14 00:48:47

标签: c++11 data-structures hashtable

我正在使用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

我知道输出的内容比我的期望更加理想,并且尽可能少的链接是目标,但出于我的目的,我希望这种链接和碰撞发生,以便我可以执行我需要的计算为我的计划。我错过了实现这一目标的步骤吗?

1 个答案:

答案 0 :(得分:0)

出现了一些问题 - 一个是你将两个相同的密钥放在一起。最终发生的事情是第二个安卓实际上失败了,因为对于任何地图数据结构,每个键只能获得一个值。如果你看,你会发现包含“abc”的桶的值为“bca”。

对于bucket_count,不能保证它是任何特定值,并且可能是实现定义的。例如,它可能是你的实现总是创建至少2个桶,如果它创建任何桶。在确定该项目被丢弃之前,它还可以在插入第二个项目时创建第二个桶。