重複の可能性:
O(1)の一意の乱数?
Cプログラミング言語の整数配列の一意の乱数
サイズが決まっていstd::vector
ないユニークな要素があります。このベクトルから20個のユニークでランダムな要素をフェッチしたいと思います。「一意」とは、同じインデックスを複数回フェッチしたくないことを意味します。現在、私がこれを行う方法は、を呼び出すことstd::random_shuffle
です。ただし、これには、ベクトル全体(1000を超える要素が含まれる場合があります)をシャッフルする必要があります。ベクトルを変更してもかまいませんが(スレッドロックを使用する必要がないため、変更しない方がよいです)、最も重要なのは、これを効率的にしたいということです。必要以上にシャッフルするべきではありません。
に部分的な範囲を渡すことを検討しましたstd::random_shuffle
が、要素のサブセットのみをシャッフルすることに注意してください。つまり、その範囲外の要素は使用されません。
ヘルプをいただければ幸いです。ありがとうございました!
注:私はVisual Studio 2005を使用しているため、C++11の機能とライブラリにアクセスできません。