哈希函数结果和存储区编号在unordered_set中

问题描述

假设我有一个用自己的哈希函数std::unordered_set<T> mySet初始化的hashFunc(T item)。我想做的是首先将一些项目插入mySet,然后有一个函数search(T item)接收一个项目,找到要插入的存储桶b (但不插入),最后返回存储桶b上的所有其他项目。我可以像这样计算b吗?

b = hashFunc(item)

是否可以保证b将成为我要找的存储桶?如果没有,我有什么选择?

解决方法

unordered_set上的bucket方法获取一个键,并返回具有该键的元素将进入的存储区索引。例如:

#include <iostream>
#include <string>
#include <unordered_set>

int main() {
  std::unordered_set<std::string> x = {"foo","bar","baz"};

  std::cout << "foo: " << x.bucket("foo") << "\n";
  std::cout << "fox: " << x.bucket("fox") << "\n";
  std::cout << "bat: " << x.bucket("bat") << "\n";
}

在我的实现中,打印

foo: 2
fox: 0
bat: 1

有了存储区索引后,您将通过调用占用存储区索引的beginend重载来对该存储区中的项目进行迭代。

您不需要直接调用哈希函数。