Как я отбираю случайный класс, чтобы не получать дублирующиеся случайные значения [дубликат]

станд.:: пара пригождается для нескольких других контейнерных классов в STL.

, Например:

std::map<>
std::multimap<> 

Оба станд. хранилища:: пары ключей и значений.

При использовании карты и мультикарты, Вы часто получаете доступ к элементам с помощью указателя на пару.

110
задан AlG 8 August 2016 в 19:56
поделиться

2 ответа

Вы не должны создавать новый экземпляр Random в цикле. Попробуйте что-нибудь вроде:

var rnd = new Random();
for(int i = 0; i < 100; ++i) 
   Console.WriteLine(rnd.Next(1, 100));

Предполагается, что последовательность случайных чисел, сгенерированная одним экземпляром Random , должна быть равномерно распределена. Создавая новый экземпляр Random для каждого случайного числа в быстрой последовательности, вы, вероятно, засеваете их идентичными значениями и заставите их генерировать одинаковые случайные числа. Конечно, в этом случае сгенерированная последовательность будет далека от равномерного распределения.

Для полноты, если вам действительно нужно повторно заполнить Random , вы создадите новый экземпляр Случайное с новым начальным числом:

rnd = new Random(newSeed);
99
ответ дан 24 November 2019 в 03:06
поделиться
public static Random rand = new Random(); // this happens once, and will be great at preventing duplicates

Обратите внимание, это не должно использоваться в криптографических целях.

4
ответ дан 24 November 2019 в 03:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: