std:: sample
|
Definiert im Header
<algorithm>
|
||
|
template
<
class
PopulationIt,
class
SampleIt,
class
Distance,
class
URBG
>
SampleIterator sample
(
PopulationIt first, PopulationIt last,
|
(seit C++17) | |
Wählt
n
Elemente aus der Sequenz
[
first
,
last
)
(ohne Zurücklegen) aus, sodass jede mögliche Stichprobe die gleiche Wahrscheinlichkeit des Auftretens hat, und schreibt die ausgewählten Elemente in den Ausgabeiterator
out
. Zufallszahlen werden mit dem Zufallszahlengenerator
g
erzeugt.
Wenn n größer als die Anzahl der Elemente in der Sequenz ist, werden alle Elemente in der Sequenz ausgewählt.
Der Algorithmus ist stabil (erhält die relative Reihenfolge der ausgewählten Elemente) nur dann, wenn
PopulationIt
die Anforderungen eines
LegacyForwardIterator
erfüllt.
Wenn der Werttyp von first (bis C++20) * first (seit C++20) nicht writable zu out ist, ist das Programm ill-formed.
Wenn eine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert:
-
out
liegt in
[first,last). -
PopulationIterfüllt nicht die Anforderungen eines LegacyInputIterator . -
SampleIterfüllt nicht die Anforderungen eines LegacyOutputIterator . - Alle folgenden Bedingungen sind erfüllt:
|
(bis C++23) |
|
(seit C++23) |
-
-
SampleIterfüllt nicht die Anforderungen von LegacyRandomAccessIterator .
-
-
Gegeben sei der Typ
Tals std:: remove_reference_t < URBG > , ist eine der folgenden Bedingungen erfüllt:
-
-
Terfüllt nicht die Anforderungen von UniformRandomBitGenerator .
-
|
(bis C++20) |
Inhaltsverzeichnis |
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
|
(until C++17)
(C++11)
|
ordnet Elemente in einem Bereich zufällig neu an
(Funktions-Template) |
|
(C++20)
|
wählt N zufällige Elemente aus einer Sequenz aus
(Algorithmus-Funktionsobjekt) |