问题描述
假设我有一个用自己的哈希函数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
有了存储区索引后,您将通过调用占用存储区索引的begin,end重载来对该存储区中的项目进行迭代。
您不需要直接调用哈希函数。