gpt4 book ai didi

c++ - 从一组唯一值中选择一个唯一的随机子集

转载 作者:IT老高 更新时间:2023-10-28 23:03:55 25 4
gpt4 key购买 nike

C++。 Visual Studio 2010。

我有一个 std::vector V 的 N 个唯一元素(heavy 结构)。如何有效地从中挑选出 M 个随机、独特的元素?

例如V 包含 10 个元素:{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } 我选择了三个...

  • 4、0、9
  • 0、7、8
  • 但不是这个:0、5、5 <--- 不是唯一的!

首选 STL。那么,是这样的吗?

std::minstd_rand gen; // linear congruential engine??
std::uniform_int<int> unif(0, v.size() - 1);
gen.seed((unsigned int)time(NULL));

// ...?

// Or is there a good solution using std::random_shuffle for heavy objects?

最佳答案

创建 0, 1, ..., N - 1 范围内的随机排列,并选择其中的第一个 M;将它们用作 索引 到您的原始 vector 中。

通过使用 std::iotastd::random_shuffle:

可以很容易地使用标准库进行随机排列
std::vector<Heavy> v; // given

std::vector<unsigned int> indices(V.size());
std::iota(indices.begin(), indices.end(), 0);
std::random_shuffle(indices.begin(), indices.end());

// use V[indices[0]], V[indices[1]], ..., V[indices[M-1]]

您可以提供random_shuffle使用您选择的随机数生成器;详情请查看文档。

关于c++ - 从一组唯一值中选择一个唯一的随机子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com