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

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

我如何搜索一个 std::unordered_set 知道散列值和一些谓词对象? (由 pred(x) && pred(y) 决定等价的谓词意味着 x == y。)

最佳答案

好吧,您可以忽略散列值并迭代整个 unsorted_set 来测试谓词。这不是理想的效率,因为您更愿意只迭代一个桶,但它会按照您的要求进行。

标准 unordered_set 有一个接口(interface) begin(size_t) 来获取特定桶的迭代器(按数字),还有一个接口(interface) bucket_count() 获取桶的数量。

具有给定散列的对象保证全部出现在同一个桶中,因此迭代该桶测试谓词足以满足您的需求。

我实际上在标准中看不到任何东西来保证迭代正确的桶是 hash_value % bucket_count()。有一个函数可以获取给定对象 的存储桶,但不能获取给定哈希值 的存储桶。不过,请在您的实现中尝试一下:我认为这是一个合理的猜测,我可能只是没能找到标准中的关键限制。

总而言之,我想你想要这样的东西:

size_t bucket = hash_value % myset.bucket_count();
find_if(myset.begin(bucket), myset.end(bucket), pred);

但我不确定。

关于c++ - 通过哈希值和谓词搜索 std::unordered_set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923373/

相关文章:

c++ - Boost,在io_service.post之前创建线程池

c++ - 从共享库导出模板化 C++ 类在 Linux 上如何工作?

c++ - CMake:尝试将链接库添加到未在此目录中构建的目标

c++ - 使用别名模板和继承的显式析构函数调用

c++ - 我应该总是使用 noexcept 作为 setter/getter 吗?

c++ - vector 修改后引用 vector.back() 的奇怪行为

c++ - static_assert 可以检查类型是否为 vector 吗?

c++ - 在 Windows 中编译 Apache Thrift 服务

c++ - VS 201 3's Compiler doesn' t 看不到 FLTK 库,但 VS 的 IntelliSense 确实适用于项目 Garland 的 QSlim

c++ - 为什么在文件 I/O 中读取数据 block 比逐字节读取更快