std::sample
| Deklariert im Header <algorithm>
|
||
template< class PopulationIt, class SampleIt, class Distance, class URBG >
SampleIterator sample( PopulationIt first, PopulationIt last,
SampleIt out, Distance n, URBG&& g );
|
(seit C++17) | |
Wählt n Elemente aus der Sequenz [first, last) (ohne Zurücklegen) so aus, dass jede mögliche Stichprobe mit gleicher Wahrscheinlichkeit erscheint, und schreibt diese ausgewählten Elemente in den Ausgabeiterator out. Zufallszahlen werden mit dem Zufallszahlengenerator g erzeugt.
Falls n größer ist als die Anzahl der Elemente in der Sequenz, werden alle Elemente der Sequenz ausgewählt.
Der Algorithmus ist stabil (bewahrt die relative Reihenfolge der ausgewählten Elemente) nur dann, wenn PopulationIt die Anforderungen von LegacyForwardIterator erfüllt.
Falls der Werttyp von first(bis C++20)*first(seit C++20) nicht writable in out ist, ist das Programm fehlerhaft.
Falls eine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert:
outbefindet sich in[first,last).PopulationIterfüllt nicht die Anforderungen von LegacyInputIterator.SampleIterfüllt nicht die Anforderungen von LegacyOutputIterator.- Alle folgenden Bedingungen sind erfüllt:
|
(bis C++23) |
|
(seit C++23) |
SampleIterfüllt nicht die Anforderungen von LegacyRandomAccessIterator.
- Gegeben den Typ
Talsstd::remove_reference_t<URBG>, ist eine der folgenden Bedingungen erfüllt:
Terfüllt nicht die Anforderungen von UniformRandomBitGenerator.
|
(bis C++20) |
Parameter
| first, last | - | das Paar von Iteratoren, das den Bereich der Elemente definiert, aus denen die Stichprobe (die Grundgesamtheit) entnommen wird |
| out | - | der Ausgabeiterator, in den die Stichproben geschrieben werden |
| n | - | Anzahl der zu entnehmenden Stichproben |
| g | - | der Zufallszahlengenerator, der als Quelle für Zufälligkeit dient |
| Typanforderungen | ||
-
Distance
muss ein Ganzzahltyp sein.
|
||
Rückgabewert
Gibt eine Kopie von out nach der letzten ausgegebenen Probe zurück, also das Ende des Probenbereichs.
Komplexität
Linear in std:: distance ( first, last ) .
Mögliche Implementierung
Sehen Sie die Implementierungen in libstdc++ , libc++ und MSVC STL .
Hinweise
Diese Funktion kann Auswahlstichproben oder Reservoir Sampling implementieren.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_sample
|
201603L
|
(C++17) |
std::sample
|
Beispiel
#include <algorithm> #include <iostream> #include <iterator> #include <random> #include <string> int main() { std::string in {"ABCDEFGHIJK"}, out; std::sample(in.begin(), in.end(), std::back_inserter(out), 4, std::mt19937 {std::random_device{}()}); std::cout << "Four random letters out of " << in << " : " << out << '\n'; }
Mögliche Ausgabe:
Four random letters out of ABCDEFGHIJK: EFGK
Siehe auch
(bis C++17)(C++11) |
ordnet Elemente in einem Bereich zufällig um (Funktionsschablone & Algorithmus-Funktionsobjekt) |
(C++20) |
|
(C++20) |
wählt N zufällige Elemente aus einer Sequenz aus (Algorithmus-Funktionsobjekt) |