在c++中检索std::map的随机键元素
retrieve random key element for std::map in c++
如何在c++中获得std::map的随机键?使用迭代器?我不希望维护额外的数据结构
std::map
迭代器是双向的,这意味着选择一个随机密钥将是O(n)
。在不使用其他数据结构的情况下,基本上您唯一的选择是使用std::advance
和begin()
的随机增量。例如:
std::map<K, V> m;
auto it = m.begin();
std::advance(it, rand() % m.size());
K random_key = it->first;
<random>
,则将rand()
替换为(例如)std::mt19939
)。这取决于你的目的是什么。std::map
是一个排序容器,但不支持按元素号随机访问。考虑到这一点和键集的知识,您可以随机选择一个点,在这个点上使用lower_bound
或upper_bound
来挖掘映射,以找到附近的元素。这将导致基于元素与地图中其他元素之间的间隙来选择元素,这意味着如果元素/间隙本身是有效随机的,那么初始结果可能被认为是有效随机的,而随机元素的重复选择将不会均匀分布。
例如,假设你的键是大写字母,键"C"、"O"、"Q"answers"S"在地图中。如果你从a - z中随机生成一个字母,你很有可能最终得到C、O或S,而不是Q,因为只有PQR靠近Q,使用上限或下限,你最终会选择其中的两个,所以2/26的机会,尽管只有4个元素。尽管如此,如果C、O、Q和S的选择一开始就有一些随机性,你可以认为间隔和选择是随机的。
你可以像这样插入到容器中,然后进行少量随机的迭代器自增/自减操作,但这仍然不是真正的随机。
一个真正随机的结果需要逐个遍历列表,或者你想要避免的二级索引容器。
相关文章:
- 如何使用 SML 随机生成八进制元组
- 随机自动点击器C++使用一个键进行开/关
- 在boost::hana中给定一个键元组,如何从映射中获取值元组
- 随机访问元组向量中的元组值
- 带有映射的 Lambda 函数,其中键是元组,值是双精度
- cv2.waitkey(0)当随机键按时不等待-OpenCV 3.1.0,python3,ubuntu
- 随机采样C++中具有权重的元组的向量
- 根据值的概率从 Map 获取随机键
- 推力:redy_by_key将zip_iterator(元组)传递到自定义函子中,以通过键检索平均值
- C 通过随机选择其元素从两个元组制成元组
- Qhash-热以获取随机键和价值
- 可以处理随机访问和键搜索的数据结构是什么?
- 为多映射中的特定键选择随机元素
- 使用std::元组作为std::unordereded_map的键
- 用于存储唯一<键,值>元组的数据结构,其中<value>最小值
- 元函数,具有对缺失特征的默认行为以及如何检测随机访问
- 用于存储元组键的数据结构:参数关系列表
- 使用C++元组类型作为映射中的键
- 通过删除一些键和一些元素来更新映射的问题
- 在c++中检索std::map的随机键元素