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) (라이브러리 펀더멘털 TS)
template < class PopulationIterator, class SampleIterator, class Distance >

SampleIterator sample ( PopulationIterator first, PopulationIterator last,

SampleIterator out, Distance n ) ;
(2) (라이브러리 펀더멘털 TS v2)

시퀀스 [ first , last ) 에서 n 개의 요소를 선택하며, 각 가능한 샘플이 동일한 확률로 나타나도록 하고 선택된 요소들을 출력 반복자 out 에 기록합니다.

만약 n 이 시퀀스의 요소 수보다 크면, last - first 개의 요소를 선택합니다.

이 알고리즘은 PopulationIterator LegacyForwardIterator 요구 사항을 충족할 경우에만 안정적입니다.

1) 난수는 난수 생성기 g 를 사용하여 생성됩니다.
2) 난수는 per-thread engine 을 사용하여 생성됩니다.

목차

매개변수

first, last - 샘플링을 수행할 범위를 형성하는 반복자 쌍(모집단)
out - 샘플이 기록되는 출력 반복자. [ first , last ) 범위에 속하지 않아야 함
n - 생성할 샘플의 개수
g - 무작위성의 소스로 사용되는 난수 생성기
-
PopulationIterator LegacyInputIterator 요구 사항을 충족해야 함.
-
SampleIterator LegacyOutputIterator 요구 사항을 충족해야 함.
-
SampleIterator PopulationIterator LegacyForwardIterator 를 충족하지 않을 경우 LegacyRandomAccessIterator 요구 사항도 충족해야 함.
-
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)
범위 내 요소들을 무작위로 재정렬
(함수 템플릿)