私はstd::bitset<32> word
を持っています。ランダムに選択し、1のビットのインデックス(0-31)を選びたいと思います。そこにはstd::algorithm
が適していますか? もし簡単なら、bitset
をstringまたはintに変換し、stringまたはintに変換することができます。ここでビットセット内のセットビットのランダムな位置を選択するベストC++方法
1
A
答えて
2
はそれで最初に刺します:
std::bitset<32> bitset{...};
std::mt19937 prng(std::time(nullptr));
std::uniform_int_distribution<std::size_t> dist{1, bitset.count()};
std::size_t p = 0;
for(std::size_t c = dist(prng); c; ++p)
c -= bitset[p];
// (p - 1) is now the index of the chosen bit.
それはランダムで、その後c
番目のセットのビットを探して、その間隔でc
を選んでやって、設定ビットをカウントすることで動作します。
+0
@Quentinほとんど:D 'p'は望ましいインデックスではないと思います –
+0
@HannaKhalil' for'インクリメントは 'c'がゼロになった後もう一度' p'を実行するので、私はそれをオフセットする必要がありました。 – Quentin
関連する問題
- 1. Cのセットビットの位置を取得
- 2. 効率的にセットビットをランダムに選択する
- 3. 重複のない配列からランダムな位置を選択
- 4. グリッド内の別のランダムな点を選択する方法
- 5. JRadioButtonsのButtonGroup内のボタンをランダムに選択する方法は?
- 6. ベストな方法 - C#
- 7. ベストな方法(C#の)
- 8. 選択したテーブルの位置を変更する方法
- 9. Pythonで特定の配列位置を選択する方法
- 10. 選択要素のランダムな位置にオプションを追加しますか?
- 11. Spritekitでボールのランダムな位置を設定する方法は?
- 12. メッシュのランダムな位置を生成する方法は?
- 13. クラス内のリストからランダムに選択する方法
- 14. 選択肢の位置を見つける方法?
- 15. Yahoo Pipesのアイテムのランダムなセットを選択する方法
- 16. fieldEditorを選択した位置に移動する方法は?
- 17. テキストファイル内の文字の位置を特定する方法(C++)
- 18. C++ランダムな週単位の整数を生成する方法
- 19. テキストの選択位置に基づいてdivを配置する方法
- 20. Cでビットセットを実装する方法
- 21. ベストな方法(コンパイル)C
- 22. MATLABのランダムな位置に円を描く方法
- 23. JSがラジオの選択を生成しました - 最初の位置をデフォルトの位置にする方法
- 24. ユーザーが選択するランダムなmaxを設定する方法
- 25. listviewの現在の位置から他の選択された位置にアニメーションを移動する方法は?
- 26. を設定し、カーソルデータグリッドセル内の位置を選択し、テキスト
- 27. androidのwebviewから選択した部分の開始位置と終了位置を取得する方法
- 28. ViewSwitcherリセットスピナー選択位置
- 29. div内でランダムな位置を生成するjavascript
- 30. ランダムな衝突のない位置でGameObjectをインスタンス化する方法は?
http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution – chris
ありがとう、あなた。それがどのように役立つのでしょうか?すべてのビットが1ではないので、0〜31の間のすべてのインデックスが有効ではない –
これはXY問題のように聞こえる。あなたは実際に何を達成しようとしていますか? – NathanOliver