如何在知道哈希值并有一些谓词对象的情况下搜索std::unordered_set? (谓词通过pred(x) && pred(y)
表示x == y
来确定等效性。)
最佳答案
好吧,您可以忽略哈希值,并迭代整个unsorted_set
以测试谓词。这不是理想的效率,因为您只希望迭代一个存储桶,但是它可以满足您的要求。
标准unordered_set
具有用于获取特定存储桶(按数字)的迭代器的begin(size_t)
接口(interface),以及用于获取存储桶数量的接口(interface)bucket_count()
。
保证具有给定哈希值的对象全部都出现在同一存储桶中,因此,对存储桶进行谓词测试足以满足您的需求。
我实际上在标准中看不到任何东西可以保证hash_value % bucket_count()
来迭代正确的存储桶。有一个功能可以获取给定对象的存储桶,而不能获取给定哈希值的存储桶。不过,请在您的实现上尝试一下:我认为这是一个合理的猜测,我可能只是未能在标准中找到关键的限制。
总而言之,我认为您想要的是:
size_t bucket = hash_value % myset.bucket_count();
find_if(myset.begin(bucket), myset.end(bucket), pred);
但我不确定。