Namespaces
Variants

std::sample

De es.cppreference.net
 
 
Biblioteca de algoritmos
Algoritmos restringidos y algoritmos sobre rangos (C++20)
Algoritmos restringidos, p. ej. ranges::copy, ranges::sort, ...
Operaciones de secuencia no modificadoras    
Operaciones por lotes
(C++17)
Operaciones de búsqueda
Operaciones de secuencia modificadoras
Operaciones de copia
(C++11)
(C++11)
Operaciones de intercambio
Operaciones de transformación
Operaciones de generación
Operaciones de eliminación
Operaciones de cambio de orden
(hasta C++17)(C++11)
(C++20)(C++20)
Operaciones de muestreo
(C++17)

Ordenamiento y operaciones relacionadas
Operaciones de particionado
(C++11)    

Operaciones de ordenamiento
Operaciones de búsqueda binaria
(en rangos particionados)
Operaciones de conjunto (en rangos ordenados)
Operaciones de fusión (en rangos ordenados)
Operaciones de montículo
Operaciones de mínimo/máximo
(C++11)
(C++17)
Operaciones de comparación lexicográfica
Operaciones de permutación


 
Definido en el encabezado <algorithm>
template< class PopulationIt, class SampleIt, class Distance, class URBG >
SampleIterator sample( PopulationIt first, PopulationIt last,
                       SampleIt out, Distance n, URBG&& g );
(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 usando 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 los requisitos de LegacyForwardIterator.

Si el tipo de valor de first(hasta C++20)*first(desde C++20) no es writable en out, el programa está mal formado.

Si se cumple alguna de las siguientes condiciones, el comportamiento no está definido:

(hasta C++23)
(desde C++23)
  • Dado el tipo T como std::remove_reference_t<URBG>, se cumple alguna de las siguientes condiciones:
  • El tipo de retorno de T no se puede convertir a Distance.
(hasta C++20)

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

(hasta C++17)(C++11)
reordena aleatoriamente elementos en un rango
(plantilla de función & objeto función de algoritmo)
selecciona N elementos aleatorios de una secuencia
(objeto función de algoritmo)