如何搜索 std::unordered_set 知道哈希值并拥有一些谓词对象?(谓词通过pred(x) && pred(y)
意义确定等价x == y
。)
问问题
1714 次
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 回答