给定一组整数:
std::set<int> itemInTest;
Run Code Online (Sandbox Code Playgroud)
在这个集合中有大约4000个整数,我想循环100次,每次它可以从集合中随机选择100个不同的元素.此外,所有整数都是正数.
如何随机挑选其中一个?我知道stackoverflow中有很多答案,但有些太复杂了,有些并不是那么随意.
首先,将您的项目放入向量中,因为您需要多次随机访问它们:
vector<int> items(itemInTest.begin(), itemInTest.end());
Run Code Online (Sandbox Code Playgroud)
然后,如果你需要100个项目并且不想两次选择相同的项目,你可能只是将整个事情洗牌:
std::random_device rd;
std::mt19937 gr(rd());
shuffle(items.begin(), items.end(), gr);
Run Code Online (Sandbox Code Playgroud)
现在只需要前100个元素.如果你想再次使用它们:
set<int> result(items.begin(), items.begin() + 100);
Run Code Online (Sandbox Code Playgroud)
或者您可以使用任何您喜欢的输出容器类型 - 包括矢量.
您可以random_shuffle再次执行该步骤,直到完成100次整体迭代.
如果你没有C++ 11,你可以使用std::random_shuffle()而不是std::shuffle(),注意随机性的质量可能会降低.然后你不需要std::mt19937,只需:
random_shuffle(items.begin(), items.end());
Run Code Online (Sandbox Code Playgroud)