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

有帮助吗?

解决方案

好吧,您可以忽略哈希价值并迭代整个内容 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);

但是我不确定。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top