Namespaces
Variants

std::sample

Von de.cppreference.net
 
 
Algorithmenbibliothek
Eingeschränkte Algorithmen und Algorithmen auf Bereichen (C++20)
Eingeschränkte Algorithmen, z. B. ranges::copy, ranges::sort, ...
Nicht modifizierende Sequenzoperationen    
Stapeloperationen
(C++17)
Suchoperationen
Modifizierende Sequenzoperationen
Kopieroperationen
(C++11)
(C++11)
Tauschoperationen
Transformationsoperationen
Erzeugungsoperationen
Entfernungsoperationen
Reihenfolgenändernde Operationen
(bis C++17)(C++11)
(C++20)(C++20)
Stichprobenoperationen
(C++17)

Sortier- und verwandte Operationen
Partitionierungsoperationen
(C++11)    

Sortieroperationen
Binäre Suchoperationen
(auf partitionierten Bereichen)
Mengenoperationen (auf sortierten Bereichen)
Mischoperationen (auf sortierten Bereichen)
Haufenoperationen
Minimum/Maximum-Operationen
(C++11)
(C++17)
Lexikografische Vergleichsoperationen
Permutationsoperationen


 
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:

  • out befindet sich in [first, last).
  • PopulationIt erfüllt nicht die Anforderungen von LegacyInputIterator.
  • SampleIt erfüllt nicht die Anforderungen von LegacyOutputIterator.
  • Alle folgenden Bedingungen sind erfüllt:
(bis C++23)
(seit C++23)
  • Gegeben den Typ T als std::remove_reference_t<URBG>, ist eine der folgenden Bedingungen erfüllt:
  • Der Rückgabetyp von T ist nicht konvertierbar in Distance.
(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)
wählt N zufällige Elemente aus einer Sequenz aus
(Algorithmus-Funktionsobjekt)