zu wählen Ich habe std::bitset<32> word
und ich möchte nach dem Zufallsprinzip und Index (0-31) von einem Bit, das ist 1. Wie kann ich das ohne Schleifen und Zähler. Gibt es dafür eine std::algorithm
? Wenn es einfacher ist, kann ich die bitset
in Zeichenfolge oder int konvertieren und es auf der Zeichenfolge oder Int.Best C++ Weg zufällig Position des gesetzten Bits in Bitset
1
A
Antwort
2
Hier ist ein erster Stab an sie:
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.
Es funktioniert durch die gesetzten Bits zu zählen, den Zufall c
in diesem Intervall wählen zu tun, dann sucht den c
th gesetzt Bit.
+0
@Quentin fast: D Ich denke 'p' nicht' p-1' ist der gewünschte Index –
+0
@HannaKhalil das 'für' Inkrement wird' p' noch einmal nach 'c' hat Null erreicht, so dass ich es ausgleichen musste. – Quentin
Verwandte Themen
- 1. Anzahl der gesetzten Bits in einem Char bestimmen
- 2. Wie BitSet als Folge von Bits
- 3. Schnellste Möglichkeit, Bits in einem Java-Array zu permutieren
- 4. Wahrscheinlichste Bits in zufälliger Ganzzahl
- 5. Überprüfen, ob alle Bits in BitSet auf True gesetzt sind
- 6. Wie kann ich die Position des höchstwertigen Bits in einer Zahl erhalten?
- 7. Select Spannweiten der gesetzten Bits in einer Bitmaske, die mit einem 1-Bit in einem Selektor Bitmap überlappen
- 8. Wie konvertiert man eine Bereichsuntermenge von Bits in einem C++ - Bitset in eine Zahl?
- 9. Schreiben von 'Bits' in C++ - Dateiströme
- 10. Setzen von Bits in C
- 11. Beeinflusst BitSet flip() die Länge von BitSet?
- 12. Bitfeld vs Bitset
- 13. Wie würden Sie die Anzahl der in einer Fließkommazahl gesetzten Bits zählen?
- 14. Verschieben des Vorzeichen-Bits in .NET
- 15. Linke Shift-Bits in c
- 16. Wie implementiert man ein Bitset in C?
- 17. Bitset variabler Größe
- 18. Verketten von Bits in C++
- 19. Gegeben ein unsigned int, was ist der schnellste Weg, um die "Indizes" der gesetzten Bits zu erhalten?
- 20. Erstellen eines BitSet bestimmter Länge in Java
- 21. Zufällig generierte Hexadezimalzahl in C#
- 22. Bits Erhalten von Byte
- 23. C# Zufällig (Long)
- 24. BitSet Speichernutzung in Scala
- 25. Konvertiere Byte [] in BitSet
- 26. in bitset, kann ich "to_ulong" für einen bestimmten Bereich von Bits verwenden?
- 27. Wie erstelle ich ein Bitset aus Binärzeichenfolge?
- 28. 32 Bits in unit64 Umwandlung in C++
- 29. Berechnen mit zufällig generierten Zahlen in C++
- 30. Wie konvertiert man eine Zeichenfolge in Bits in C#
http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution – chris
Danke chris. aber wie hilft das? Nicht alle Bits sind 1, daher sind nicht alle Indizes zwischen 0 und 31 gültig. –
Das klingt nach einem XY-Problem. Was versuchst du eigentlich zu erreichen? – NathanOliver