从容器中获取随机元素,该容器在恒定时间内没有严格的元素顺序
Obtaining random element from container which doesn't have strict element order in constant time
我有一个自定义容器,它通过唯一 ID(简单的 int64)提供对其元素的访问。此 ID 不是索引悬停器,因此容器的用户不应关心内部元素的顺序。
我已经实现了最简单的前向迭代器,它提供了能够使用具有基于范围的 for 循环的容器operator++
。
但是现在,我想通过生成随机数并使用std::next
从容器中获取随机元素,所有这些都在恒定时间内完成,因此前向迭代器是不够的,因为它的operator++
将被称为 N 次引入线性复杂性。为了实现恒定速度,我必须提供operator+=
这将使我的前向迭代器成为一种随机访问迭代器(容器能够提供恒定时间访问)。我在这里说得对吗?如果是这样,它引入了一个不太适用于我的容器的顺序概念。
因此,我需要恒定时间随机访问,但没有像vector
那样严格的顺序。我的逻辑错误在哪里?
您修改container::iterator
以允许您访问"随机"元素的策略是不合时宜的。因为你总是在0
和container::size()
之间选择一个数字,并将其添加到container::begin()
,所以你需要保留container
,而不仅仅是一个迭代器
相反,您应该做的是添加一个成员template< class Generator > container::reference container::random_element( Generator& g )
,委托给std::uniform_int_distribution
来选择元素,并将container::iterator
保留为前向迭代器(或可能是双向迭代器)。
相关文章:
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 序列容器 - 只能按顺序访问元素
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 保留从一个多集复制到另一个多集的元素的顺序
- 如何在 C++ 中将从文本文件中读取的元素推送和弹出到数组中,并按 Revserse 顺序输出堆栈?
- 查找数组的第一个和最后一个索引,其中 from 和 to 元素的顺序总和最大
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 编写链接函数的更短/更有效的方法,该函数按字典顺序添加新元素
- stable_sort不遵守元素的顺序
- 从容器中获取随机元素,该容器在恒定时间内没有严格的元素顺序
- 如何在默认和二维数组中找到顺序扩大元素的位置
- 多重映射是否保证广告顺序与其初始值设定项中给出的元素顺序匹配
- 调用std::nth_element后第n个元素之前的元素顺序
- 如何从向量中删除随机元素而不重复它们并保持元素顺序?C++
- 如何在不更改元素顺序的情况下合并两个unordered_maps
- b树实现中的元素顺序错误
- 提升::p tr_向量改变元素顺序
- Equal_range c++元素顺序
- std::unordered_multimap中的元素顺序