【发布时间】:2011-12-19 19:26:56
【问题描述】:
我正在寻找一种有效的方法来以随机顺序选择对std::vector<T> 的每个元素的访问,而无需重新洗牌或复制它们,即不使用std::random_shuffle,并确保每个元素仅被选择一次。
我不想复制或重新洗牌,因为 a)T 的每个实例都可能是一个非常大的对象,并且 b)对于我将对向量的元素进行的其他操作,这更容易它们保持相同的顺序。
此外,我真的不想走在不断挑选和拒绝重复的街道上。我很可能会在向量中存储大量此类大型对象,效率是关键,因为我希望每秒多次调用此随机选择方法。
【问题讨论】:
-
你可以为你的类型实现一个交换方法吗?如果标准库实现使用依赖于参数的查找进行交换(它应该),那么您将得到
O(1)向量中元素的交换。