【发布时间】:2016-12-19 14:11:04
【问题描述】:
我有一张地图std::map<unsigned int,double> areas,我想从中绘制一个随机大小的随机子集(均匀分布)。到目前为止,我知道如何选择一个随机元素。
const int range_from = 1;
const int range_to = areas.size();
std::random_device rand_dev;
std::mt19937 generator(rand_dev());
std::uniform_int_distribution<int> distr(range_from, range_to);
std::map<unsigned int,double>::iterator rand_element;
auto itrtr = ++areas.begin();
std::advance(itrtr, distr(generator));
unsigned int random_key = itrtr->first;
rand_element = areas.find(random_key);
我将如何扩展此算法?或者不同的ansatz会更好吗?
【问题讨论】:
-
@m.s.使用随机排列是一个非常优雅的解决方案
-
目标大小真的是随机的,还是您有准确的样本数?
-
Mark Ransom - 是的。但是知道如何指定子集的大小当然很好。到目前为止,我只能找到例如insert method。但我想知道是否还有一种方法我只需要指定子集的长度而不是位置。但由于地图是预先随机化的,我可以简单地使用插入方法并将地图从其开头子集到任意(
标签: c++