Namespaces
Variants

std::experimental:: sample

From cppreference.net
Definido en el encabezado <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)

Selecciona n elementos de la secuencia [ first , last ) de modo que cada muestra posible tenga igual probabilidad de aparición, y escribe esos elementos seleccionados en el iterador de salida out .

Si n es mayor que el número de elementos en la secuencia, selecciona last - first elementos.

El algoritmo es estable solo si PopulationIterator cumple con los requisitos de LegacyForwardIterator .

1) Los números aleatorios se generan utilizando el generador de números aleatorios g .
2) Los números aleatorios se generan utilizando el motor por hilo .

Contenidos

Parámetros

first, last - par de iteradores que forman el rango desde el cual realizar el muestreo (la población)
out - el iterador de salida donde se escriben las muestras. No debe estar en el rango [ first , last )
n - número de muestras a tomar
g - el generador de números aleatorios utilizado como fuente de aleatoriedad
-
PopulationIterator debe cumplir con los requisitos de LegacyInputIterator .
-
SampleIterator debe cumplir con los requisitos de LegacyOutputIterator .
-
SampleIterator también debe cumplir con los requisitos de LegacyRandomAccessIterator si PopulationIterator no cumple con LegacyForwardIterator .
-
El tipo de valor de PopulationIterator debe ser escribible en out .
-
Distance debe ser un tipo entero.
-
URBG debe cumplir con los requisitos de UniformRandomBitGenerator y su tipo de retorno debe ser convertible a Distance .

Valor de retorno

Devuelve una copia de out después de la última muestra que fue enviada, es decir, el final del rango de muestras.

Complejidad

Lineal en std:: distance ( first, last ) .

Notas

Esta función puede implementar muestreo por selección o muestreo por reservorio.

Ejemplo

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

Salida posible:

five random letters out of abcdefgh : cdefg

Véase también

(until C++17) (C++11)
reordena aleatoriamente elementos en un rango
(plantilla de función)