Namespaces
Variants

std:: sample

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
sample
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Definiert 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) 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 ) .
  • PopulationIt erfüllt nicht die Anforderungen eines LegacyInputIterator .
  • SampleIt erfüllt nicht die Anforderungen eines LegacyOutputIterator .
  • Alle folgenden Bedingungen sind erfüllt:
(bis C++23)
(seit C++23)
  • Der Rückgabetyp von T ist nicht konvertierbar zu Distance .
(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)
wählt N zufällige Elemente aus einer Sequenz aus
(Algorithmus-Funktionsobjekt)