C++;向量在每次随机洗牌后以相同的方式随机化 我尝试了几种方法来在C++中的向量容器中随机化项目。虽然不止这些,但每次随机化时,这些项目必须是不同的。目前,它每次都会吐出相同的随机洗牌向量

C++;向量在每次随机洗牌后以相同的方式随机化 我尝试了几种方法来在C++中的向量容器中随机化项目。虽然不止这些,但每次随机化时,这些项目必须是不同的。目前,它每次都会吐出相同的随机洗牌向量,c++,random,vector,shuffle,C++,Random,Vector,Shuffle,我使用的方法如下: ///////////////////////////////////////////////// METHOD 1 srand(time(0)); random_shuffle(mapkeys.begin(), mapkeys.end()); METHOD 2 int myrandom (int i) { return std::rand()%i;} random_shuffle(mapkeys.begin(), mapkeys.end(), myrandom); ME

我使用的方法如下:

/////////////////////////////////////////////////
METHOD 1
srand(time(0));
random_shuffle(mapkeys.begin(), mapkeys.end());

METHOD 2
int myrandom (int i) { return std::rand()%i;}
random_shuffle(mapkeys.begin(), mapkeys.end(), myrandom);

METHOD 3
auto engine = default_random_engine{};
shuffle(begin(mapkeys), end(mapkeys), engine);

METHOD 4
default_random_engine gen(unsigned(time (NULL)));
shuffle(begin(mapkeys), end(mapkeys), gen);
/////////////////////////////////////////////////

我从堆栈上的各种问题中找到了这些。虽然我理解需要将种子传递到随机洗牌的概念,但它似乎对我不起作用。如果有人不仅能指出错误,而且能向我解释错误,我将不胜感激

如果传入种子,每次都会得到相同的序列(这就是发布种子的目的)。如果你想随机化它,你必须先随机化种子,假设它以某个默认值开始。但是如果我以方法1中的时间为基础,那么这不应该是随机的“足够”吗?是的,很抱歉我错过了。你知道你应该只播一次种子吗?而每秒多次使用
time(NULL)
的种子植入将再次生成相同的序列?此外,您不应再使用
rand
random\u shuffle
,而应使用
工具和
std::shuffle
。另请参见。尽管Baum发表了评论,但我尝试了方法(1),它对我有效。如果你传递种子,每次都会得到相同的序列(这就是种子发布的目的)。如果你想随机化它,你必须先随机化种子,假设它以某个默认值开始。但是如果我以方法1中的时间为基础,那么这不应该是随机的“足够”吗?是的,很抱歉我错过了。你知道你应该只播一次种子吗?而每秒多次使用
time(NULL)
的种子植入将再次生成相同的序列?此外,您不应再使用
rand
random\u shuffle
,而应使用
工具和
std::shuffle
。另请参见。尽管Baum发表了评论,但我尝试了方法(1),它对我有效。如果你传递种子,每次都会得到相同的序列(这就是种子发布的目的)。如果你想随机化它,你必须先随机化种子,假设它以某个默认值开始。但是如果我以方法1中的时间为基础,那么这不应该是随机的“足够”吗?是的,很抱歉我错过了。你知道你应该只播一次种子吗?而每秒多次使用
time(NULL)
的种子植入将再次生成相同的序列?此外,您不应再使用
rand
random\u shuffle
,而应使用
工具和
std::shuffle
。另请参见。尽管Baum有评论,我还是尝试了方法(1),它对我有效。