在伪随机数生成中使用整个列表

时间:2012-11-11 01:32:58

标签: c++ algorithm list random

  

可能重复:
  Pseudo-Random Traversal of a Set

我正在尝试编写一种算法,将播放列表中的歌曲按随机顺序排列,因此如果有10首歌曲,我需要随机数生成器在重复之前按0-9中的每个值。使用算法:x_current = (a * x_prev + c) mod m,有没有办法通过cm的某些值实现此目的?

2 个答案:

答案 0 :(得分:2)

尝试使用std::random_shuffle

 vector<int> playOrder;    

  // set some values:
  for (int i=1; i<10; ++i) playOrder.push_back(i); // 1 2 3 4 5 6 7 8 9

  // Don't forget to seed, or mix will be the same each run
  srand(time(NULL)); 

  // using built-in random generator:
  random_shuffle ( playOrder.begin(), playOrder.end() );

  // An example of how you might use the new random array.
  for(int i=0; i<playOrder.size(); i++)
    player.PlayTrack(playOrder[i]);

答案 1 :(得分:0)

看看this question。此外,对于小型播放列表,只需使用歌曲编号对阵列进行洗牌就足够了。