std:: sample
|
Определено в заголовочном файле
<algorithm>
|
||
|
template
<
class
PopulationIt,
class
SampleIt,
class
Distance,
class
URBG
>
SampleIterator sample
(
PopulationIt first, PopulationIt last,
|
(начиная с C++17) | |
Выбирает
n
элементов из последовательности
[
first
,
last
)
(без замены) таким образом, что каждая возможная выборка имеет равную вероятность появления, и записывает выбранные элементы в выходной итератор
out
. Случайные числа генерируются с использованием генератора случайных чисел
g
.
Если n больше количества элементов в последовательности, выбираются все элементы последовательности.
Алгоритм является стабильным (сохраняет относительный порядок выбранных элементов) только если
PopulationIt
удовлетворяет требованиям
LegacyForwardIterator
.
Если тип значения first (до C++20) * first (начиная с C++20) не является записываемым в out , программа является некорректной.
Если выполняется любое из следующих условий, поведение не определено:
-
out
находится в диапазоне
[first,last). -
PopulationItне удовлетворяет требованиям LegacyInputIterator . -
SampleItне удовлетворяет требованиям LegacyOutputIterator . - Все следующие условия выполнены:
|
(до C++23) |
|
(начиная с C++23) |
-
-
SampleItне удовлетворяет требованиям LegacyRandomAccessIterator .
-
-
Для типа
Tкак std:: remove_reference_t < URBG > , выполняется любое из следующих условий:
-
-
Tне удовлетворяет требованиям UniformRandomBitGenerator .
-
|
(до C++20) |
Содержание |
Параметры
| first, last | - | пара итераторов, определяющих диапазон элементов, из которых производится выборка (генеральная совокупность) |
| out | - | выходной итератор, в который записываются выборки |
| n | - | количество извлекаемых выборок |
| g | - | генератор случайных чисел, используемый как источник случайности |
| Требования к типам | ||
-
Distance
должен быть целочисленным типом.
|
||
Возвращаемое значение
Возвращает копию out после последнего выведенного сэмпла, то есть конец диапазона сэмплов.
Сложность
Линейно по std:: distance ( first, last ) .
Возможная реализация
Смотрите реализации в libstdc++ , libc++ и MSVC STL .
Примечания
Эта функция может реализовывать выборку по методу selection sampling или reservoir sampling .
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_sample
|
201603L
|
(C++17) |
std::sample
|
Пример
#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'; }
Возможный вывод:
Four random letters out of ABCDEFGHIJK: EFGK
Смотрите также
|
(until C++17)
(C++11)
|
случайно переупорядочивает элементы в диапазоне
(шаблон функции) |
|
(C++20)
|
выбирает N случайных элементов из последовательности
(функциональный объект алгоритма) |