std::experimental:: sample
|
Определено в заголовочном файле
<experimental/algorithm>
|
||
|
template
<
class
PopulationIterator,
class
SampleIterator,
class
Distance,
class
URBG
>
|
(1) | (library fundamentals TS) |
|
template
<
class
PopulationIterator,
class
SampleIterator,
class
Distance
>
SampleIterator sample
(
PopulationIterator first, PopulationIterator last,
|
(2) | (library fundamentals TS v2) |
Выбирает
n
элементов из последовательности
[
first
,
last
)
таким образом, что каждая возможная выборка имеет равную вероятность появления, и записывает выбранные элементы в выходной итератор
out
.
Если n больше количества элементов в последовательности, выбирает last - first элементов.
Алгоритм стабилен только в том случае, если
PopulationIterator
удовлетворяет требованиям
LegacyForwardIterator
.
Содержание |
Параметры
| 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)
|
случайным образом переупорядочивает элементы в диапазоне
(шаблон функции) |