当前位置:  开发笔记 > 编程语言 > 正文

如何从c ++中的一个集合中随机选择一个元素?

如何解决《如何从c++中的一个集合中随机选择一个元素?》经验,为你挑选了1个好方法。

给定一组整数:

std::set itemInTest; 

在这个集合中有大约4000个整数,我想循环100次,每次它可以从集合中随机选择100个不同的元素.此外,所有整数都是正数.

如何随机挑选其中一个?我知道stackoverflow中有很多答案,但有些太复杂了,有些并不是那么随意.



1> John Zwinck..:

首先,将您的项目放入向量中,因为您需要多次随机访问它们:

vector items(itemInTest.begin(), itemInTest.end());

然后,如果你需要100个项目并且不想两次选择相同的项目,你可能只是将整个事情洗牌:

std::random_device rd;
std::mt19937 gr(rd());
shuffle(items.begin(), items.end(), gr);

现在只需要前100个元素.如果你想再次使用它们:

set result(items.begin(), items.begin() + 100);

或者您可以使用任何您喜欢的输出容器类型 - 包括矢量.

您可以random_shuffle再次执行该步骤,直到完成100次整体迭代.

如果你没有C++ 11,你可以使用std::random_shuffle()而不是std::shuffle(),注意随机性的质量可能会降低.然后你不需要std::mt19937,只需:

random_shuffle(items.begin(), items.end());


令人遗憾的是,C++标准库没有部分洗牌.改变整个范围以选择m
推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有