Выбор уникального случайного подмножества из набора уникальных значений

C++. Visual Studio 2010.

У меня есть std::vectorV из N уникальных элементов (Heavyструктуры). Как можно эффективно выбрать из него M случайных уникальных элементов?

V содержит 10 элементов: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } и я выбираю три...

  • 4, 0, 9
  • 0, 7, 8
  • Но НЕ это: 0, 5, 5 <--- не уникально!

STL является предпочтительным. Итак, что-то вроде этого?

std::minstd_rand gen; // linear congruential engine??
std::uniform_int<int> unif(0, v.size() - 1);
gen.seed((unsigned int)time(NULL));

// ...?

// Or is there a good solution using std::random_shuffle for heavy objects?
12
задан l33t 10 March 2012 в 23:10
поделиться