std::experimental:: sample
|
헤더 파일에 정의됨
<experimental/algorithm>
|
||
|
template
<
class
PopulationIterator,
class
SampleIterator,
class
Distance,
class
URBG
>
|
(1) | (라이브러리 펀더멘털 TS) |
|
template
<
class
PopulationIterator,
class
SampleIterator,
class
Distance
>
SampleIterator sample
(
PopulationIterator first, PopulationIterator last,
|
(2) | (라이브러리 펀더멘털 TS v2) |
시퀀스
[
first
,
last
)
에서
n
개의 요소를 선택하며, 각 가능한 샘플이 동일한 확률로 나타나도록 하고 선택된 요소들을 출력 반복자
out
에 기록합니다.
만약 n 이 시퀀스의 요소 수보다 크면, last - first 개의 요소를 선택합니다.
이 알고리즘은
PopulationIterator
가
LegacyForwardIterator
요구 사항을 충족할 경우에만 안정적입니다.
목차 |
매개변수
| 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)
|
범위 내 요소들을 무작위로 재정렬
(함수 템플릿) |