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
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 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 ) .
  • PopulationIt ne satisfait pas aux exigences de LegacyInputIterator .
  • SampleIt ne satisfait pas aux exigences de LegacyOutputIterator .
  • Toutes les conditions suivantes sont satisfaites :
(jusqu'à C++23)
(depuis C++23)
  • Le type de retour de T n'est pas convertible en Distance .
(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)
sélectionne N éléments aléatoires d'une séquence
(objet fonction algorithme)