如何确保std :: random_shuffle总是产生不同的结果?

lau*_*ent 13 c++ random shuffle std

是否有一些功能,类似于srand()我需要调用以确保std::random_shuffle()始终产生不同的结果?即如果我使用相同的数据多次调用它,我希望每次订单都不同.我怎样才能确定?

Dav*_*e S 13

std::random_shuffle有两种形式.一个需要2个参数(开始/结束迭代器),另一个需要3个(开始/结束迭代器和随机生成器).

第一种形式使用std::rand(),因此您将使用std::srand()它的随机数生成器播种.您也可以使用3参数版本并自己提供RNG.

  • 据我了解,第一种形式如何实现它是它的业务.有些平台可能不会使用`std :: rand`. (7认同)

Tom*_*err 6

std::random_shuffle 具有用于指定RNG的模板重载.

template <class RandomAccessIterator, class RandomNumberGenerator>
  void random_shuffle ( RandomAccessIterator first, RandomAccessIterator last,
                        RandomNumberGenerator& rand );
Run Code Online (Sandbox Code Playgroud)

参考


slu*_*uki 5

random_shuffle自C++ 14(在C++ 17中删除)后被弃用,并被shuffle替换(自C++ 11以来存在) http://en.cppreference.com/w/cpp/algorithm/random_shuffle

可能的用法:

shuffle(items.begin(), items.end(), std::default_random_engine(std::random_device()()));
Run Code Online (Sandbox Code Playgroud)