C++下数组随机shuffle的方法

来源:互联网 发布:手机连接电脑软件 编辑:程序博客网 时间:2024/05/22 12:26


最近在linux下用C++做实验,需要在1到n之间多次均匀随机选择m个元素(m<n),如果用random()函数,则需要多次循环,效率太低,因此想到一个方法:

1)定义大小为n的数组,且数组元素即为序号0,1,2,...,n-a。

2)对数组进行shuffle操作,打乱数组元素的顺序。

3)取数组的前m个样本。


其中数组的shuffle操作如下:


// shuffle algorithm example#include <iostream>     // std::cout#include <algorithm>    // std::shuffle#include <array>        // std::array#include <random>       // std::default_random_engine#include <chrono>       // std::chrono::system_clockint main () {  std::array<int,5> foo {1,2,3,4,5};  // obtain a time-based seed:  unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();  shuffle (foo.begin(), foo.end(), std::default_random_engine(seed));  std::cout << "shuffled elements:";  for (int& x: foo) std::cout << ' ' << x;  std::cout << '\n';  return 0;}


0 0