Namespaces
Variants

std::sample

De fr.cppreference.net
 
 
Bibliothèque d'algorithmes
Algorithmes contraints et algorithmes sur les plages (C++20)
Algorithmes contraints, par ex. ranges::copy, ranges::sort, ...
Opérations de séquence non modifiantes    
Opérations par lot
(C++17)
Opérations de recherche
Opérations de séquence modifiantes
Opérations de copie
(C++11)
(C++11)
Opérations d'échange
Opérations de transformation
Opérations de génération
Opérations de suppression
Opérations de changement d'ordre
(jusqu'à C++17)(C++11)
(C++20)(C++20)
Opérations d'échantillonnage
(C++17)

Tri et opérations associées
Opérations de partitionnement
(C++11)    

Opérations de tri
Opérations de recherche binaire
(sur des plages partitionnées)
Opérations d'ensemble (sur des plages triées)
Opérations de fusion (sur des plages triées)
Opérations de tas
Opérations de minimum/maximum
(C++11)
(C++17)
Opérations de comparaison lexicographique
Opérations de permutation


 
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 [firstlast) (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 :

  • out est dans [firstlast).
  • PopulationIt ne satisfait pas les exigences de LegacyInputIterator.
  • SampleIt ne satisfait pas les exigences de LegacyOutputIterator.
  • Toutes les conditions suivantes sont satisfaites :
(jusqu'à C++23)
(depuis C++23)
  • Étant donné le type T comme std::remove_reference_t<URBG>, l'une des conditions suivantes est satisfaite :
  • Le type de retour de T n'est pas convertible en Distance.
(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)
sélectionne N éléments aléatoires d'une séquence
(objet fonction d'algorithme)