std::sample
Definido en el archivo de encabezado <algorithm>
|
||
template< class PopulationIterator, class SampleIterator, class Distance, class URBG > |
(desde C++17) | |
Selecciona n
elementos de la secuencia [first; last) (sin reemplazo) de modo que cada muestra posible tenga la misma 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 last-first elementos.
El algoritmo es estable (conserva el orden relativo de los elementos seleccionados) solo si PopulationIterator
cumple con los requisitos de ForwardIterator.
El comportamiento no está definido si out
está en [first; last).
Contenido |
[editar] Parámetros
first, last | - | Un par de iteradores que forman el rango desde el cual hacer el muestreo (la población). |
out | - | El iterador de salida donde se escriben las muestras. |
n | - | El número de muestras a tomar. |
g | - | El generador de números aleatorios utilizado como fuente de aleatoriedad. |
Requisitos de tipo | ||
-PopulationIterator debe satisfacer los requisitos de InputIterator.
| ||
-SampleIterator debe satisfacer los requisitos de OutputIterator.
| ||
-SampleIterator también debe cumplir con los requerimientos de RandomAccessIterator si PopulationIterator no cumple con ForwardIterator
| ||
-El tipo valor de PopulationIterator debe ser escribible a out .
| ||
-Distance debe ser un tipo entero.
| ||
-std::remove_reference_t<URBG> debe cumplir con los requerimientos de UniformRandomBitGenerator y su tipo de retorno debe ser convertible a Distance .
|
[editar] Valor de retorno
Devuelve una copia de out
después de la última muestra que se emitió, es decir, al final del rango de muestra.
[editar] Complejidad
Lineal en std::distance(first,last).
[editar] Notas
Esta función puede implementar muestreo de selección o muestreo de reserva.
Macro de Prueba de característica |
---|
__cpp_lib_sample
|
[editar] Posible implementación
Véanse las implementaciones en libstdc++, libc++ and MSVC STL.
[editar] Ejemplo
#include <iostream> #include <random> #include <string> #include <iterator> #include <algorithm> int main() { std::string in = "hgfedcba", out; std::sample(in.begin(), in.end(), std::back_inserter(out), 5, std::mt19937{std::random_device{}()}); std::cout << "cinco letras al azar obtenidas de " << in << " : " << out << '\n'; }
Posible salida:
cinco letras al azar obtenidas de hgfedcba: gfcba
[editar] Véase también
(hasta C++17)(C++11) |
Reordena aleatoriamente elementos en un rango. (plantilla de función) |
(C++20) |
Selecciona n elementos al azar de una secuencia. (niebloid) |