如何解决哈希函数结果和存储区编号在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
有了存储区索引后,您将通过调用占用存储区索引的begin,end重载来对该存储区中的项目进行迭代。
您不需要直接调用哈希函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。