Escolha um subconjunto aleatório exclusivo de um conjunto de valores exclusivos

C ++. Visual Studio 2010.

Eu tenho umstd::vector V de N elementos únicos pesad estruturas). Como escolher com eficiência M elementos únicos e aleatório

Por exemplo. V contém 10 elementos: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} e eu escolho três ...

4, 0, 9 0, 7, 8Mas NÃO é este: 0, 5, 5 <--- não é exclusivo!

STL é o preferido. Então, algo assim?

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?