Namensräume
Varianten
Aktionen

std::experimental::sample

Von cppreference.com
 
 
 
 
Definiert im Header <experimental/algorithm>
template< class PopulationIterator, class SampleIterator,

          class Distance, class URBG >
SampleIterator sample( PopulationIterator first, PopulationIterator last,
                       SampleIterator out, Distance n,

                       URBG&& g );
(1) (library fundamentals TS)
template< class PopulationIterator, class SampleIterator, class Distance >

SampleIterator sample( PopulationIterator first, PopulationIterator last,

                       SampleIterator out, Distance n );
(2) (Library Fundamentals TS v2)

Wählt n Elemente aus der Sequenz [firstlast) aus, sodass jede mögliche Stichprobe mit gleicher Wahrscheinlichkeit auftritt, und schreibt die ausgewählten Elemente in den Ausgabiterator out.

Wenn n größer ist als die Anzahl der Elemente in der Sequenz, werden last - first Elemente ausgewählt.

Der Algorithmus ist nur dann stabil, wenn PopulationIterator die Anforderungen von LegacyForwardIterator erfüllt.

1) Zufallszahlen werden mit dem Zufallszahlengenerator g erzeugt.
2) Zufallszahlen werden unter Verwendung der per-Thread-Engine erzeugt.

Inhalt

[bearbeiten] Parameter

first, last - Paar von Iteratoren, das den Bereich bildet, aus dem die Stichprobe entnommen wird (die Population)
out - der Ausgabiterator, in den die Stichproben geschrieben werden. Darf nicht im Bereich [firstlast) liegen.
n - Anzahl der zu entnehmenden Stichproben
g - der Zufallszahlengenerator, der als Quelle der Zufälligkeit verwendet wird
-
PopulationIterator muss die Anforderungen von LegacyInputIterator erfüllen.
-
SampleIterator muss die Anforderungen von LegacyOutputIterator erfüllen.
-
SampleIterator muss auch die Anforderungen von LegacyRandomAccessIterator erfüllen, wenn PopulationIterator nicht LegacyForwardIterator erfüllt.
-
Der Werttyp von PopulationIterator muss in out schreibbar sein.
-
Distance muss ein ganzzahliger Typ sein.
-
URBG muss die Anforderungen von UniformRandomBitGenerator erfüllen und sein Rückgabetyp muss in Distance konvertierbar 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] Hinweise

Diese Funktion kann Stichprobenauswahl oder Reservoir-Sampling implementieren.

[bearbeiten] Beispiel

#include <experimental/algorithm>
#include <iostream>
#include <iterator>
#include <random>
#include <string>
 
int main()
{
    std::string in = "abcdefgh", out;
    std::experimental::sample(in.begin(), in.end(), std::back_inserter(out),
                              5, std::mt19937{std::random_device{}()});
    std::cout << "five random letters out of " << in << " : " << out << '\n';
}

Mögliche Ausgabe

five random letters out of abcdefgh : cdefg

[bearbeiten] Siehe auch

(bis C++17)(C++11)
Ordnet Elemente in einem Bereich zufällig neu an
(Funktionstemplate) [edit]