通过哈希值和谓词搜索std :: unordered_set
-
29-09-2019 - |
题
如何搜索std :: unordered_set知道哈希值并拥有一些谓词对象? (通过 pred(x) && pred(y)
意义 x == y
.)
解决方案
好吧,您可以忽略哈希价值并迭代整个内容 unsorted_set
测试谓词。这不是理想的效率,因为您只想迭代一个水桶,但它可以做您的要求。
标准 unordered_set
有一个接口 begin(size_t)
要获取特定存储桶(按数字)和接口的迭代器 bucket_count()
获取水桶数量。
具有给定哈希的对象可以保证所有这些都出现在同一存储桶中,因此迭代鉴定谓词的水桶测试足以满足您的意愿。
我实际上看不到标准中的任何东西,可以保证正确的迭代词是 hash_value % bucket_count()
. 。有一个函数可以获取给定的水桶 目的, ,但不要为给定的水桶 哈希值. 。但是,请尝试您的实施:我认为这是一个合理的猜测,我可能只是未能找到标准的关键限制。
总而言之,我认为您想要类似的东西:
size_t bucket = hash_value % myset.bucket_count();
find_if(myset.begin(bucket), myset.end(bucket), pred);
但是我不确定。
不隶属于 StackOverflow