std:: sample
|
Definido en el encabezado
<algorithm>
|
||
|
template
<
class
PopulationIt,
class
SampleIt,
class
Distance,
class
URBG
>
SampleIterator sample
(
PopulationIt first, PopulationIt last,
|
(desde C++17) | |
Selecciona
n
elementos de la secuencia
[
first
,
last
)
(sin reemplazo) de modo que cada muestra posible tenga igual probabilidad de aparición, y escribe esos elementos seleccionados en el iterador de salida
out
. Los números aleatorios se generan utilizando el generador de números aleatorios
g
.
Si n es mayor que el número de elementos en la secuencia, selecciona todos los elementos de la secuencia.
El algoritmo es estable (preserva el orden relativo de los elementos seleccionados) solo si
PopulationIt
cumple con los requisitos de
LegacyForwardIterator
.
Si el tipo de valor de first (hasta C++20) * first (desde C++20) no es escribible en out , el programa está mal formado.
Si se satisface cualquiera de las siguientes condiciones, el comportamiento es indefinido:
-
out
está en
[first,last). -
PopulationItno cumple con los requisitos de LegacyInputIterator . -
SampleItno cumple con los requisitos de LegacyOutputIterator . - Se satisfacen todas las siguientes condiciones:
|
(hasta C++23) |
|
(desde C++23) |
-
-
SampleItno cumple con los requisitos de LegacyRandomAccessIterator .
-
-
Dado el tipo
Tcomo std:: remove_reference_t < URBG > , se satisface cualquiera de las siguientes condiciones:
-
-
Tno cumple con los requisitos de UniformRandomBitGenerator .
-
|
(hasta C++20) |
Contenidos |
Parámetros
| first, last | - | el par de iteradores que define el rango de elementos desde los cuales tomar la muestra (la población) |
| out | - | el iterador de salida donde se escriben las muestras |
| n | - | número de muestras a tomar |
| g | - | el generador de números aleatorios utilizado como fuente de aleatoriedad |
| Requisitos de tipo | ||
-
Distance
debe ser un tipo entero.
|
||
Valor de retorno
Devuelve una copia de out después de la última muestra que fue generada, es decir, el final del rango de muestras.
Complejidad
Lineal en std:: distance ( first, last ) .
Implementación posible
Vea las implementaciones en libstdc++ , libc++ y MSVC STL .
Notas
Esta función puede implementar muestreo por selección o reservoir sampling .
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_sample
|
201603L
|
(C++17) |
std::sample
|
Ejemplo
#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'; }
Salida posible:
Four random letters out of ABCDEFGHIJK: EFGK
Véase también
|
(until C++17)
(C++11)
|
reordena aleatoriamente elementos en un rango
(plantilla de función) |
|
(C++20)
|
selecciona N elementos aleatorios de una secuencia
(objeto función de algoritmo) |