std::sample
| Definiert in 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, so dass jede mögliche Stichprobe die gleiche Wahrscheinlichkeit hat, ausgewählt zu werden, und schreibt diese ausgewählten Elemente in den Ausgabiterator out. Zufallszahlen werden mit dem Zufallszahlengenerator g generiert.
Wenn n größer ist als die Anzahl der Elemente in der Sequenz, werden alle Elemente in der Sequenz ausgewählt.
Der Algorithmus ist stabil (erhält die relative Reihenfolge der ausgewählten Elemente), nur wenn PopulationIt die Anforderungen an einen LegacyForwardIterator erfüllt.
Wenn der Werttyp von *first nicht in out geschrieben werden kann, ist das Programm ill-formed.
Wenn eine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert
- out befindet sich im Bereich
[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 eines LegacyRandomAccessIterator.
-
- Unter der Bedingung, dass der Typ
Tstd::remove_reference_t<URBG> ist, ist eine der folgenden Bedingungen erfüllt
-
Terfüllt nicht die Anforderungen eines UniformRandomBitGenerator.
-
|
(bis C++20) |
Inhalt |
[bearbeiten] Parameter
| first, last | - | das Paar von Iteratoren, das den Bereich der Elemente definiert, aus denen die Stichprobe entnommen werden soll (die Population) |
| out | - | der Ausgabiterator, an den die Stichproben geschrieben werden |
| n | - | Anzahl der zu entnehmenden Stichproben |
| g | - | der Zufallszahlengenerator, der als Quelle der Zufälligkeit verwendet wird |
| Typanforderungen | ||
-Distance muss ein ganzzahliger Typ sein. | ||
[bearbeiten] Rückgabewert
Gibt eine Kopie von out nach der letzten ausgegebenen Stichprobe zurück, d. h. das Ende des Stichprobenbereichs.
[bearbeiten] Komplexität
Linear in std::distance(first, last).
[bearbeiten] Mögliche Implementierung
Siehe die Implementierungen in libstdc++, libc++ und MSVC STL.
[bearbeiten] Hinweise
Diese Funktion kann Auswahl-Sampling oder Reservoir-Sampling implementieren.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_sample |
201603L |
(C++17) | std::sample
|
[bearbeiten] 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
[bearbeiten] Siehe auch
| (bis C++17)(C++11) |
Ordnet Elemente in einem Bereich zufällig neu an (Funktionstemplate) |
| (C++20) |
Wählt N zufällige Elemente aus einer Sequenz aus (Algorithmus-Funktionsobjekt) |