最小値minと最大値maxが与えられたときに、その範囲から重複しないようにn個の数値を取り出す関数を作りたい。例えば、0~100までの範囲から重複しないように10個の数値を取り出す。 [ 7, 18, 20, 45, 47, 62, 70, 80, 89, 91 ] とりあえず、3つの方法が考えられたのでそれぞれ実装して速度比較をしてみた。 まず1つ目の方法は、とても単純で今までに生成していない乱数が生成されるまで、乱数を生成し続けるというものだ。C++で実装してみると以下のようになる。 std::set<int> RandomUniqueNumbers(const int n, const int min, const int max) { std::set<int> result; int r; for(int i=0; i<n; ++i) { // まだresultに含まれていない乱