通过哈希值和谓词搜索std :: unordered_set

时间:2010-10-13 12:02:11

标签: c++ boost c++11 unordered-set

如何搜索std :: unordered_set知道哈希值并拥有一些谓词对象? (谓词通过pred(x) && pred(y)确定等同性意味着x == y。)

1 个答案:

答案 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);

但我不确定。