3

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

4

1 回答 1

4

好吧,您可以忽略散列值并迭代整个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);

但我不确定。

于 2010-10-13T14:09:16.190 回答