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,
|
(depuis C++17) | |
Sélectionne
n
éléments de la séquence
[
first
,
last
)
(sans remplacement) 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
. Les nombres aléatoires sont générés en utilisant le 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 (préserve l'ordre relatif des éléments sélectionnés) uniquement si
PopulationIt
satisfait aux exigences de
LegacyForwardIterator
.
Si le type de valeur de first (jusqu'en C++20) * first (depuis C++20) n'est pas écrivable vers out , le programme est mal formé.
Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
-
out
se trouve dans
[first,last). -
PopulationItne satisfait pas aux exigences de LegacyInputIterator . -
SampleItne satisfait pas aux exigences de LegacyOutputIterator . - Toutes les conditions suivantes sont satisfaites :
|
(jusqu'à C++23) |
|
(depuis C++23) |
-
-
SampleItne satisfait pas aux exigences de LegacyRandomAccessIterator .
-
-
Étant donné le type
Tcomme std:: remove_reference_t < URBG > , l'une des conditions suivantes est satisfaite :
-
-
Tne satisfait pas aux exigences de UniformRandomBitGenerator .
-
|
(jusqu'à C++20) |
Table des matières |
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
|
(until C++17)
(C++11)
|
réorganise aléatoirement les éléments dans une plage
(fonction template) |
|
(C++20)
|
sélectionne N éléments aléatoires d'une séquence
(objet fonction algorithme) |