unordered_set 中的哈希函数结果和桶号
Hash function result and bucket number in unordered_set
假设我有一个 std::unordered_set<T> mySet
使用我自己的散列函数 hashFunc(T item)
初始化。我想要做的是首先将一些项目插入 mySet
,然后有一个函数 search(T item)
接受一个项目,找到如果要插入它会去哪个桶 b
(但不插入它) 最后 returns 存储桶 b
上的所有其他项目。我可以这样计算b
吗?
b = hashFunc(item)
是否保证 b
就是我要找的桶?如果没有,我有什么选择?
unordered_set
上的 bucket 方法接受一个键和 returns 具有该键的元素将进入的桶索引。例如:
#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 重载来迭代该存储桶中的项目。
您不需要直接调用哈希函数。
假设我有一个 std::unordered_set<T> mySet
使用我自己的散列函数 hashFunc(T item)
初始化。我想要做的是首先将一些项目插入 mySet
,然后有一个函数 search(T item)
接受一个项目,找到如果要插入它会去哪个桶 b
(但不插入它) 最后 returns 存储桶 b
上的所有其他项目。我可以这样计算b
吗?
b = hashFunc(item)
是否保证 b
就是我要找的桶?如果没有,我有什么选择?
unordered_set
上的 bucket 方法接受一个键和 returns 具有该键的元素将进入的桶索引。例如:
#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 重载来迭代该存储桶中的项目。
您不需要直接调用哈希函数。