Namespaces
Variants

std::experimental:: sample

From cppreference.net
Défini dans l'en-tête <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)

Sélectionne n éléments de la séquence [ first , last ) de telle sorte que chaque échantillon possible ait une probabilité égale d'apparition, et écrit ces éléments sélectionnés dans l'itérateur de sortie out .

Si n est supérieur au nombre d'éléments dans la séquence, sélectionne last - first éléments.

L'algorithme est stable uniquement si PopulationIterator satisfait aux exigences de LegacyForwardIterator .

1) Les nombres aléatoires sont générés en utilisant le générateur de nombres aléatoires g .
2) Les nombres aléatoires sont générés en utilisant le moteur par thread .

Table des matières

Paramètres

first, last - paire d'itérateurs définissant la plage à partir de laquelle effectuer l'échantillonnage (la population)
out - l'itérateur de sortie où les échantillons sont écrits. Ne doit pas se trouver dans la plage [ first , last )
n - nombre d'échantillons à prélever
g - le générateur de nombres aléatoires utilisé comme source de hasard
-
PopulationIterator doit satisfaire aux exigences de LegacyInputIterator .
-
SampleIterator doit satisfaire aux exigences de LegacyOutputIterator .
-
SampleIterator doit également satisfaire aux exigences de LegacyRandomAccessIterator si PopulationIterator ne satisfait pas LegacyForwardIterator .
-
Le type de valeur de PopulationIterator doit être inscriptible dans out .
-
Distance doit être un type entier.
-
URBG doit satisfaire aux exigences de UniformRandomBitGenerator et son type de retour doit être convertible en Distance .

Valeur de retour

Retourne une copie de out après le dernier échantillon qui a été produit, c'est-à-dire la fin de la plage d'échantillons.

Complexité

Linéaire en std:: distance ( first, last ) .

Notes

Cette fonction peut implémenter l'échantillonnage par sélection ou l'échantillonnage par réservoir.

Exemple

#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';
}

Sortie possible :

five random letters out of abcdefgh : cdefg

Voir aussi

(until C++17) (C++11)
réorganise aléatoirement les éléments dans une plage
(modèle de fonction)