如何搜索std :: unordered_set知道哈希值并拥有一些谓词对象? (谓词通过pred(x) && pred(y)
确定等同性意味着x == y
。)
答案 0 :(得分:3)
好吧,您可以忽略哈希值并迭代整个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);
但我不确定。