std::sample
| Défini dans l'en-tête <algorithm>
|
||
template< class PopulationIt, class SampleIt, class Distance, class URBG >
SampleIterator sample( PopulationIt first, PopulationIt last,
SampleIt out, Distance n, URBG&& g );
|
(depuis C++17) | |
Sélectionne n éléments de la séquence [first, last) (sans remise) de sorte que chaque échantillon possible ait une probabilité d'apparition égale, et écrit ces éléments sélectionnés dans l'itérateur de sortie out. Les nombres aléatoires sont générés à l'aide du générateur de nombres aléatoires g.
Si n est supérieur au nombre d'éléments dans la séquence, sélectionne tous les éléments de la séquence.
L'algorithme est stable (conserve l'ordre relatif des éléments sélectionnés) seulement si PopulationIt satisfait les exigences de LegacyForwardIterator.
Si le type valeur de first(jusqu'à C++20)*first(depuis C++20) n'est pas writable dans out, le programme est mal formé.
Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
outest dans[first,last).PopulationItne satisfait pas les exigences de LegacyInputIterator.SampleItne satisfait pas les exigences de LegacyOutputIterator.- Toutes les conditions suivantes sont satisfaites :
|
(jusqu'à C++23) |
|
(depuis C++23) |
SampleItne satisfait pas les exigences de LegacyRandomAccessIterator.
- Étant donné le type
Tcommestd::remove_reference_t<URBG>, l'une des conditions suivantes est satisfaite :
Tne satisfait pas les exigences de UniformRandomBitGenerator.
|
(jusqu'à C++20) |
Paramètres
| first, last | - | la paire d'itérateurs définissant la plage d'éléments à partir de laquelle effectuer l'échantillonnage (la population) |
| out | - | l'itérateur de sortie où les échantillons sont écrits |
| n | - | nombre d'échantillons à prélever |
| g | - | le générateur de nombres aléatoires utilisé comme source d'aléatoire |
| Exigences de type | ||
-
Distance
doit être un type entier.
|
||
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 ) .
Implémentation possible
Voir les implémentations dans libstdc++ , libc++ et MSVC STL .
Notes
Cette fonction peut implémenter l'échantillonnage par sélection ou l'échantillonnage par réservoir .
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_sample
|
201603L
|
(C++17) |
std::sample
|
Exemple
#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'; }
Sortie possible :
Four random letters out of ABCDEFGHIJK: EFGK
Voir aussi
(jusqu'à C++17)(C++11) |
réorganise aléatoirement les éléments d'une plage (modèle de fonction & objet fonction d'algorithme) |
(C++20) |
|
(C++20) |
sélectionne N éléments aléatoires d'une séquence (objet fonction d'algorithme) |