【发布时间】:2017-12-20 12:07:35
【问题描述】:
我得到一个大向量,它本身包含特定数据类型的向量,例如std::vector<std::vector<double> > foo。我正在尝试从 foo 中检索一个随机元素 foo[idx] 以使 foo[idx] 非空或分别为 foo[idx].empty() == false。
我的天真猜测是从foo 中选择随机元素,直到满足我的约束foo[idx].empty() == false。
但是,foo 很可能非常稀疏地填充了非空向量。因此,我的方法很可能会非常缓慢。
是否有更好的方法或者我应该考虑完全不同的数据结构?
【问题讨论】:
-
std::shuffle然后迭代直到找到一个。 -
@iBug
std::shuffle不会帮助程序压缩它。 -
@JakeFreeman 创建一个索引数组然后打乱索引也很好。
-
随机的方法很好,特别是如果你可以缓存你已经尝试过的索引,这样你就不会再尝试了。