Namespaces
Variants

std:: sample

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
sample
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
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 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:

(hasta C++23)
(desde C++23)
  • El tipo de retorno de T no es convertible a Distance .
(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)
selecciona N elementos aleatorios de una secuencia
(objeto función de algoritmo)