Namespaces
Variants

std::experimental:: sample

From cppreference.net
Определено в заголовочном файле <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)

Выбирает n элементов из последовательности [ first , last ) таким образом, что каждая возможная выборка имеет равную вероятность появления, и записывает выбранные элементы в выходной итератор out .

Если n больше количества элементов в последовательности, выбирает last - first элементов.

Алгоритм стабилен только в том случае, если PopulationIterator удовлетворяет требованиям LegacyForwardIterator .

1) Случайные числа генерируются с использованием генератора случайных чисел g .
2) Случайные числа генерируются с использованием поточно-ориентированного генератора .

Содержание

Параметры

first, last - пара итераторов, определяющих диапазон, из которого производится выборка (генеральная совокупность)
out - выходной итератор, в который записываются выборки. Не должен находиться в диапазоне [ first , last )
n - количество выборок для создания
g - генератор случайных чисел, используемый как источник случайности
-
PopulationIterator должен удовлетворять требованиям LegacyInputIterator .
-
SampleIterator должен удовлетворять требованиям LegacyOutputIterator .
-
SampleIterator также должен удовлетворять требованиям LegacyRandomAccessIterator если PopulationIterator не удовлетворяет LegacyForwardIterator .
-
Тип значения PopulationIterator должен быть записываемым в out .
-
Distance должен быть целочисленным типом.
-
URBG должен удовлетворять требованиям UniformRandomBitGenerator и его возвращаемый тип должен быть преобразуемым в Distance .

Возвращаемое значение

Возвращает копию out после последнего выведенного сэмпла, то есть конец диапазона сэмплов.

Сложность

Линейная по std:: distance ( first, last ) .

Примечания

Эта функция может реализовывать выборку по методу selection sampling или reservoir sampling.

Пример

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

Возможный вывод:

five random letters out of abcdefgh : cdefg

Смотрите также

(until C++17) (C++11)
случайным образом переупорядочивает элементы в диапазоне
(шаблон функции)