c++ - 在 abseil::node_hash_map 中选择一个随机(ish)元素?
问题描述
是否可以有效地选择 中的某种随机元素abseil::node_hash_map
,或者更普遍地选择任何abseil
地图?
例如,我很高兴随机选择一个插槽,然后找到下一个占用的插槽并从散列到该插槽的元素中选择一个随机元素,但不清楚这是否可能没有访问地图内部。
像std::next(map, n)
where n
is an integer 之间随机选择的东西[0, map.size())
会起作用,但复杂性非常慢O(map.size())
。
解决方案
不,你不能那样做。
您可以获得的最接近的方法是创建一个单独的指向 node_hash_map 元素的指针数组,然后在这些指针中随机选择。这样,第一次选择一个元素时,它是 O(N) 时间,但之后是 O(1)。
推荐阅读
- bash - 使用 shell 变量传递选项时 autotools 配置错误
- sql - 在 Azure SQL 数据库中按角色设置权限
- javascript - 在设计用于将输入数据与 json 进行比较然后输出的函数之外的函数中无法访问 JSON 数据
- aurelia - 如何使用带有 webpack 选项和 npm 的 aurelia cli 版本 1.0.0-beta.13 将 Font Awesome 添加到 Aurelia
- javascript - 我必须用 Zapier 替换 Code 上的一些特殊字符
- aws-api-gateway - 如何使用 CloudFormation 模板更新现有 AWS API Gateway
- swisscomdev - 如何修复在 cf push 期间无法在 https://github.com/cloudfoundry/nginx-buildpack.git 克隆 git 存储库
- excel - 如何在一个单元格中拆分分隔数据并针对分隔出的每个分隔数据项重复相邻单元格
- java - 使用滤镜图像时内存增量(PhotoEditor SDK)
- node.js - 使用 ioredis 在单个原子操作中发送多个 BITOP